[FFmpeg-soc] [soc]: r5028 - in amr: amrnbdata.h amrnbdec.c

cmcq subversion at mplayerhq.hu
Mon Aug 10 20:42:32 CEST 2009


Author: cmcq
Date: Mon Aug 10 20:42:31 2009
New Revision: 5028

Log:
Unpack bitstream into runs of bits instead of a bit at a time
This saves about seven hundred bytes and makes unpacking about 15% faster

Modified:
   amr/amrnbdata.h
   amr/amrnbdec.c

Modified: amr/amrnbdata.h
==============================================================================
--- amr/amrnbdata.h	Mon Aug 10 13:12:25 2009	(r5027)
+++ amr/amrnbdata.h	Mon Aug 10 20:42:31 2009	(r5028)
@@ -71,8 +71,10 @@ enum Mode {
  * Bit-order table type
  */
 typedef struct AMROrder {
-    uint8_t index;                ///< index in (uint16_t *)AMRNBFrame
-    uint8_t bit;                  ///< bit index, LSB=0, MSB=15
+    unsigned index : 6;           ///< index in (uint16_t *)AMRNBFrame
+    unsigned len   : 4;           ///< number of bits
+    unsigned shift : 4;           ///< magnitude of shift to apply
+    unsigned rev   : 1;           ///< reverse uint16_t and right shift instead of left shift
 } AMROrder;
 
 
@@ -107,362 +109,343 @@ typedef struct {
 // The following order* tables are used to convert AMR frame parameters to and
 // from a bitstream. See 3GPP TS 26.101 for more information.
 
-#define AMR_BIT(field, bit)                  {offsetof(AMRNBFrame, field) >> 1, bit}
+#define AMR_BIT(field, l,s,r)                  {offsetof(AMRNBFrame, field) >> 1, l,s,r}
 /** Specify an LSF parameter bit */
-#define AMR_LSF(variable, bit)               AMR_BIT(lsf[variable], bit)
+#define AMR_LSF(variable, l,s,r)               AMR_BIT(lsf[variable], l,s,r)
 /** Specify a subframe-specific bit */
-#define AMR_OF(frame_num, variable, bit)     AMR_BIT(subframe[frame_num].variable, bit)
+#define AMR_OF(frame_num, variable, l,s,r)     AMR_BIT(subframe[frame_num].variable, l,s,r)
 /** Specify a pitch gain bit */
-#define AMR_PGAIN(frame_num, bit)            AMR_OF(frame_num, p_gain, bit)
+#define AMR_PGAIN(frame_num, l,s,r)            AMR_OF(frame_num, p_gain, l,s,r)
 /** Specify a fixed gain bit */
-#define AMR_FGAIN(frame_num, bit)       AMR_OF(frame_num, fixed_gain, bit)
+#define AMR_FGAIN(frame_num, l,s,r)            AMR_OF(frame_num, fixed_gain, l,s,r)
 /** Specify a pitch lag bit */
-#define AMR_PLAG(frame_num, bit)             AMR_OF(frame_num, p_lag, bit)
+#define AMR_PLAG(frame_num, l,s,r)             AMR_OF(frame_num, p_lag, l,s,r)
 /** Specify a pulse bit */
-#define AMR_PULSE(frame_num, pulse_id, bit) AMR_OF(frame_num, pulses[pulse_id], bit)
+#define AMR_PULSE(frame_num, pulse_id, l,s,r)  AMR_OF(frame_num, pulses[pulse_id], l,s,r)
 /** Specify an SID reference vector bit */
-#define AMR_SVECTOR(bit)                     AMR_BIT(sid.ref_vector, bit)
+#define AMR_SVECTOR(l,s,r)                     AMR_BIT(sid.ref_vector, l,s,r)
 /** Specify an SID energy index bit */
-#define AMR_SENERGY(bit)                     AMR_BIT(sid.energy, bit)
+#define AMR_SENERGY(l,s,r)                     AMR_BIT(sid.energy,     l,s,r)
 
-static const AMROrder order_MODE_475[95] = {
- AMR_LSF  (  0, 7), AMR_LSF  (  0, 6), AMR_LSF  (  0, 5), AMR_LSF  (  0, 4),
- AMR_LSF  (  0, 3), AMR_LSF  (  0, 2), AMR_LSF  (  0, 1), AMR_LSF  (  0, 0),
- AMR_LSF  (  1, 7), AMR_LSF  (  1, 6), AMR_LSF  (  1, 5), AMR_LSF  (  1, 4),
- AMR_LSF  (  1, 3), AMR_LSF  (  1, 2), AMR_LSF  (  1, 1), AMR_LSF  (  1, 0),
- AMR_PLAG (0,   7), AMR_PLAG (0,   6), AMR_PLAG (0,   5), AMR_PLAG (0,   4),
- AMR_PLAG (0,   3), AMR_PLAG (0,   2), AMR_PLAG (1,   3), AMR_PLAG (1,   2),
- AMR_PLAG (2,   3), AMR_PLAG (2,   2), AMR_PLAG (3,   3), AMR_PLAG (3,   2),
- AMR_PGAIN(0,   0), AMR_PGAIN(0,   1), AMR_PGAIN(0,   2), AMR_PGAIN(0,   3),
- AMR_PGAIN(2,   0), AMR_PGAIN(2,   1), AMR_PGAIN(2,   2), AMR_PGAIN(2,   3),
- AMR_LSF  (  2, 5), AMR_LSF  (  2, 4), AMR_LSF  (  2, 2), AMR_LSF  (  2, 0),
- AMR_PGAIN(2,   4), AMR_PGAIN(2,   5), AMR_PGAIN(2,   6), AMR_PGAIN(2,   7),
- AMR_PLAG (0,   1), AMR_PLAG (0,   0), AMR_PGAIN(0,   4), AMR_PGAIN(0,   5),
- AMR_PGAIN(0,   6), AMR_PGAIN(0,   7), AMR_PULSE(0,1, 1), AMR_PULSE(0,1, 0),
- AMR_LSF  (  2, 6), AMR_LSF  (  2, 3), AMR_LSF  (  2, 1), AMR_PLAG (1,   1),
- AMR_PLAG (1,   0), AMR_PULSE(1,1, 1), AMR_PULSE(1,1, 0), AMR_PLAG (2,   1),
- AMR_PLAG (2,   0), AMR_PULSE(2,1, 1), AMR_PULSE(2,1, 0), AMR_PLAG (3,   1),
- AMR_PLAG (3,   0), AMR_PULSE(3,1, 1), AMR_PULSE(3,1, 0), AMR_PULSE(0,0, 5),
- AMR_PULSE(0,0, 4), AMR_PULSE(0,0, 2), AMR_PULSE(0,0, 1), AMR_PULSE(1,0, 5),
- AMR_PULSE(1,0, 4), AMR_PULSE(1,0, 2), AMR_PULSE(1,0, 1), AMR_PULSE(2,0, 5),
- AMR_PULSE(2,0, 4), AMR_PULSE(2,0, 2), AMR_PULSE(2,0, 1), AMR_PULSE(3,0, 5),
- AMR_PULSE(3,0, 4), AMR_PULSE(3,0, 2), AMR_PULSE(3,0, 1), AMR_PULSE(0,0, 3),
- AMR_PULSE(1,0, 3), AMR_PULSE(2,0, 3), AMR_PULSE(3,0, 3), AMR_PULSE(0,0, 0),
- AMR_PULSE(1,0, 0), AMR_PULSE(2,0, 0), AMR_PULSE(3,0, 0), AMR_PULSE(0,0, 6),
- AMR_PULSE(1,0, 6), AMR_PULSE(2,0, 6), AMR_PULSE(3,0, 6)
+static AMROrder order_MODE_475[] = {
+    AMR_LSF  (  0,8, 0,0), AMR_LSF  (  1,8, 0,0), AMR_PLAG (0  ,6, 2,0),
+    AMR_PLAG (1  ,2, 2,0), AMR_PLAG (2  ,2, 2,0), AMR_PLAG (3  ,2, 2,0),
+    AMR_PGAIN(0  ,4,12,1), AMR_PGAIN(2  ,4,12,1), AMR_LSF  (  2,2, 4,0),
+    AMR_LSF  (  2,1, 2,0), AMR_LSF  (  2,1, 0,0), AMR_PGAIN(2  ,4, 8,1),
+    AMR_PLAG (0  ,2, 0,0), AMR_PGAIN(0  ,4, 8,1), AMR_PULSE(0,1,2, 0,0),
+    AMR_LSF  (  2,1, 6,0), AMR_LSF  (  2,1, 3,0), AMR_LSF  (  2,1, 1,0),
+    AMR_PLAG (1  ,2, 0,0), AMR_PULSE(1,1,2, 0,0), AMR_PLAG (2  ,2, 0,0),
+    AMR_PULSE(2,1,2, 0,0), AMR_PLAG (3  ,2, 0,0), AMR_PULSE(3,1,2, 0,0),
+    AMR_PULSE(0,0,2, 4,0), AMR_PULSE(0,0,2, 1,0), AMR_PULSE(1,0,2, 4,0),
+    AMR_PULSE(1,0,2, 1,0), AMR_PULSE(2,0,2, 4,0), AMR_PULSE(2,0,2, 1,0),
+    AMR_PULSE(3,0,2, 4,0), AMR_PULSE(3,0,2, 1,0), AMR_PULSE(0,0,1, 3,0),
+    AMR_PULSE(1,0,1, 3,0), AMR_PULSE(2,0,1, 3,0), AMR_PULSE(3,0,1, 3,0),
+    AMR_PULSE(0,0,1, 0,0), AMR_PULSE(1,0,1, 0,0), AMR_PULSE(2,0,1, 0,0),
+    AMR_PULSE(3,0,1, 0,0), AMR_PULSE(0,0,1, 6,0), AMR_PULSE(1,0,1, 6,0),
+    AMR_PULSE(2,0,1, 6,0), AMR_PULSE(3,0,1, 6,0)
 };
 
-static const AMROrder order_MODE_515[103] = {
- AMR_LSF  (  0, 0), AMR_LSF  (  0, 1), AMR_LSF  (  0, 2), AMR_LSF  (  0, 3),
- AMR_LSF  (  0, 4), AMR_LSF  (  0, 5), AMR_LSF  (  0, 6), AMR_LSF  (  0, 7),
- AMR_LSF  (  1, 0), AMR_LSF  (  1, 1), AMR_LSF  (  1, 2), AMR_LSF  (  1, 3),
- AMR_LSF  (  1, 4), AMR_LSF  (  1, 5), AMR_LSF  (  1, 6), AMR_LSF  (  1, 7),
- AMR_PLAG (0,   7), AMR_PLAG (0,   6), AMR_PLAG (0,   5), AMR_PLAG (0,   4),
- AMR_PLAG (0,   3), AMR_PLAG (1,   3), AMR_PLAG (2,   3), AMR_PLAG (3,   3),
- AMR_PGAIN(0,   0), AMR_PGAIN(0,   1), AMR_PGAIN(0,   2), AMR_PGAIN(1,   0),
- AMR_PGAIN(1,   1), AMR_PGAIN(1,   2), AMR_PGAIN(2,   0), AMR_PGAIN(2,   1),
- AMR_PGAIN(2,   2), AMR_PGAIN(3,   0), AMR_PGAIN(3,   1), AMR_PGAIN(3,   2),
- AMR_PGAIN(0,   3), AMR_PGAIN(1,   3), AMR_PGAIN(2,   3), AMR_PGAIN(3,   3),
- AMR_PLAG (0,   2), AMR_PLAG (1,   2), AMR_PLAG (2,   2), AMR_PLAG (3,   2),
- AMR_LSF  (  2, 4), AMR_PGAIN(0,   4), AMR_PGAIN(1,   4), AMR_PGAIN(2,   4),
- AMR_PGAIN(3,   4), AMR_PLAG (0,   1), AMR_PLAG (1,   1), AMR_PLAG (2,   1),
- AMR_LSF  (  2, 5), AMR_LSF  (  2, 2), AMR_LSF  (  2, 0), AMR_PGAIN(0,   5),
- AMR_PGAIN(1,   5), AMR_PGAIN(2,   5), AMR_PGAIN(3,   5), AMR_LSF  (  2, 1),
- AMR_PLAG (0,   0), AMR_PLAG (1,   0), AMR_PLAG (2,   0), AMR_PLAG (3,   1),
- AMR_LSF  (  2, 3), AMR_LSF  (  2, 6), AMR_PLAG (3,   0), AMR_PULSE(0,1, 0),
- AMR_PULSE(0,1, 1), AMR_PULSE(1,1, 0), AMR_PULSE(1,1, 1), AMR_PULSE(2,1, 0),
- AMR_PULSE(0,0, 2), AMR_PULSE(1,0, 2), AMR_PULSE(2,0, 2), AMR_PULSE(3,0, 2),
- AMR_PULSE(2,1, 1), AMR_PULSE(3,1, 0), AMR_PULSE(3,1, 1), AMR_PULSE(0,0, 1),
- AMR_PULSE(1,0, 1), AMR_PULSE(2,0, 1), AMR_PULSE(3,0, 1), AMR_PULSE(0,0, 5),
- AMR_PULSE(1,0, 5), AMR_PULSE(0,0, 4), AMR_PULSE(1,0, 4), AMR_PULSE(2,0, 5),
- AMR_PULSE(2,0, 4), AMR_PULSE(3,0, 5), AMR_PULSE(3,0, 4), AMR_PULSE(0,0, 6),
- AMR_PULSE(1,0, 6), AMR_PULSE(2,0, 6), AMR_PULSE(3,0, 6), AMR_PULSE(0,0, 0),
- AMR_PULSE(1,0, 0), AMR_PULSE(2,0, 0), AMR_PULSE(3,0, 0), AMR_PULSE(0,0, 3),
- AMR_PULSE(1,0, 3), AMR_PULSE(2,0, 3), AMR_PULSE(3,0, 3)
+static AMROrder order_MODE_515[] = {
+    AMR_LSF  (  0,8, 8,1), AMR_LSF  (  1,8, 8,1), AMR_PLAG (0  ,5, 3,0),
+    AMR_PLAG (1  ,1, 3,0), AMR_PLAG (2  ,1, 3,0), AMR_PLAG (3  ,1, 3,0),
+    AMR_PGAIN(0  ,3,13,1), AMR_PGAIN(1  ,3,13,1), AMR_PGAIN(2  ,3,13,1),
+    AMR_PGAIN(3  ,3,13,1), AMR_PGAIN(0  ,1, 3,0), AMR_PGAIN(1  ,1, 3,0),
+    AMR_PGAIN(2  ,1, 3,0), AMR_PGAIN(3  ,1, 3,0), AMR_PLAG (0  ,1, 2,0),
+    AMR_PLAG (1  ,1, 2,0), AMR_PLAG (2  ,1, 2,0), AMR_PLAG (3  ,1, 2,0),
+    AMR_LSF  (  2,1, 4,0), AMR_PGAIN(0  ,1, 4,0), AMR_PGAIN(1  ,1, 4,0),
+    AMR_PGAIN(2  ,1, 4,0), AMR_PGAIN(3  ,1, 4,0), AMR_PLAG (0  ,1, 1,0),
+    AMR_PLAG (1  ,1, 1,0), AMR_PLAG (2  ,1, 1,0), AMR_LSF  (  2,1, 5,0),
+    AMR_LSF  (  2,1, 2,0), AMR_LSF  (  2,1, 0,0), AMR_PGAIN(0  ,1, 5,0),
+    AMR_PGAIN(1  ,1, 5,0), AMR_PGAIN(2  ,1, 5,0), AMR_PGAIN(3  ,1, 5,0),
+    AMR_LSF  (  2,1, 1,0), AMR_PLAG (0  ,1, 0,0), AMR_PLAG (1  ,1, 0,0),
+    AMR_PLAG (2  ,1, 0,0), AMR_PLAG (3  ,1, 1,0), AMR_LSF  (  2,1, 3,0),
+    AMR_LSF  (  2,1, 6,0), AMR_PLAG (3  ,1, 0,0), AMR_PULSE(0,1,2,14,1),
+    AMR_PULSE(1,1,2,14,1), AMR_PULSE(2,1,1, 0,0), AMR_PULSE(0,0,1, 2,0),
+    AMR_PULSE(1,0,1, 2,0), AMR_PULSE(2,0,1, 2,0), AMR_PULSE(3,0,1, 2,0),
+    AMR_PULSE(2,1,1, 1,0), AMR_PULSE(3,1,2,14,1), AMR_PULSE(0,0,1, 1,0),
+    AMR_PULSE(1,0,1, 1,0), AMR_PULSE(2,0,1, 1,0), AMR_PULSE(3,0,1, 1,0),
+    AMR_PULSE(0,0,1, 5,0), AMR_PULSE(1,0,1, 5,0), AMR_PULSE(0,0,1, 4,0),
+    AMR_PULSE(1,0,1, 4,0), AMR_PULSE(2,0,2, 4,0), AMR_PULSE(3,0,2, 4,0),
+    AMR_PULSE(0,0,1, 6,0), AMR_PULSE(1,0,1, 6,0), AMR_PULSE(2,0,1, 6,0),
+    AMR_PULSE(3,0,1, 6,0), AMR_PULSE(0,0,1, 0,0), AMR_PULSE(1,0,1, 0,0),
+    AMR_PULSE(2,0,1, 0,0), AMR_PULSE(3,0,1, 0,0), AMR_PULSE(0,0,1, 3,0),
+    AMR_PULSE(1,0,1, 3,0), AMR_PULSE(2,0,1, 3,0), AMR_PULSE(3,0,1, 3,0)
 };
 
-static const AMROrder order_MODE_59[118] = {
- AMR_LSF  (  0, 7), AMR_LSF  (  0, 6), AMR_LSF  (  0, 3), AMR_LSF  (  0, 2),
- AMR_LSF  (  0, 4), AMR_LSF  (  0, 1), AMR_LSF  (  0, 0), AMR_LSF  (  0, 5),
- AMR_LSF  (  1, 3), AMR_LSF  (  1, 1), AMR_LSF  (  1, 8), AMR_LSF  (  1, 7),
- AMR_LSF  (  1, 5), AMR_LSF  (  1, 4), AMR_LSF  (  1, 2), AMR_LSF  (  1, 6),
- AMR_LSF  (  1, 0), AMR_PLAG (0,   5), AMR_PLAG (2,   5), AMR_PLAG (0,   4),
- AMR_PLAG (2,   4), AMR_PLAG (0,   6), AMR_PLAG (2,   6), AMR_PLAG (0,   7),
- AMR_PLAG (2,   7), AMR_PLAG (0,   3), AMR_PLAG (2,   3), AMR_PLAG (1,   3),
- AMR_PLAG (3,   3), AMR_PGAIN(0,   0), AMR_PGAIN(1,   0), AMR_PGAIN(2,   0),
- AMR_PGAIN(3,   0), AMR_PLAG (0,   2), AMR_PLAG (2,   2), AMR_PLAG (1,   2),
- AMR_PLAG (3,   2), AMR_PGAIN(0,   1), AMR_PGAIN(1,   1), AMR_PGAIN(2,   1),
- AMR_PGAIN(3,   1), AMR_PLAG (1,   1), AMR_PLAG (3,   1), AMR_PLAG (0,   1),
- AMR_PLAG (2,   1), AMR_PLAG (0,   0), AMR_PLAG (2,   0), AMR_PGAIN(0,   2),
- AMR_PGAIN(1,   2), AMR_PGAIN(2,   2), AMR_PGAIN(3,   2), AMR_PGAIN(0,   3),
- AMR_PGAIN(1,   3), AMR_PGAIN(2,   3), AMR_PGAIN(3,   3), AMR_PGAIN(0,   4),
- AMR_PGAIN(1,   4), AMR_PGAIN(2,   4), AMR_PGAIN(3,   4), AMR_LSF  (  2, 6),
- AMR_LSF  (  2, 4), AMR_LSF  (  2, 2), AMR_LSF  (  2, 3), AMR_LSF  (  2, 7),
- AMR_LSF  (  2, 8), AMR_LSF  (  2, 5), AMR_LSF  (  2, 1), AMR_PULSE(3,1, 0),
- AMR_PULSE(0,1, 1), AMR_PULSE(2,1, 1), AMR_PULSE(3,1, 1), AMR_PULSE(1,1, 1),
- AMR_PULSE(1,1, 0), AMR_PULSE(0,1, 0), AMR_PULSE(2,1, 0), AMR_LSF  (  2, 0),
- AMR_PGAIN(0,   5), AMR_PGAIN(1,   5), AMR_PGAIN(2,   5), AMR_PGAIN(3,   5),
- AMR_PLAG (1,   0), AMR_PLAG (3,   0), AMR_PULSE(0,0, 2), AMR_PULSE(1,0, 2),
- AMR_PULSE(2,0, 2), AMR_PULSE(3,0, 2), AMR_PULSE(0,0, 3), AMR_PULSE(1,0, 3),
- AMR_PULSE(2,0, 3), AMR_PULSE(3,0, 3), AMR_PULSE(0,0, 6), AMR_PULSE(1,0, 6),
- AMR_PULSE(2,0, 6), AMR_PULSE(3,0, 6), AMR_PULSE(0,0, 7), AMR_PULSE(1,0, 7),
- AMR_PULSE(2,0, 7), AMR_PULSE(3,0, 7), AMR_PULSE(0,0, 8), AMR_PULSE(1,0, 8),
- AMR_PULSE(2,0, 8), AMR_PULSE(3,0, 8), AMR_PULSE(0,0, 0), AMR_PULSE(1,0, 0),
- AMR_PULSE(2,0, 0), AMR_PULSE(3,0, 0), AMR_PULSE(0,0, 1), AMR_PULSE(1,0, 1),
- AMR_PULSE(2,0, 1), AMR_PULSE(3,0, 1), AMR_PULSE(0,0, 4), AMR_PULSE(1,0, 4),
- AMR_PULSE(2,0, 4), AMR_PULSE(3,0, 4), AMR_PULSE(0,0, 5), AMR_PULSE(1,0, 5),
- AMR_PULSE(2,0, 5), AMR_PULSE(3,0, 5)
+static AMROrder order_MODE_59[] = {
+    AMR_LSF  (  0,2, 6,0), AMR_LSF  (  0,2, 2,0), AMR_LSF  (  0,1, 4,0),
+    AMR_LSF  (  0,2, 0,0), AMR_LSF  (  0,1, 5,0), AMR_LSF  (  1,1, 3,0),
+    AMR_LSF  (  1,1, 1,0), AMR_LSF  (  1,2, 7,0), AMR_LSF  (  1,2, 4,0),
+    AMR_LSF  (  1,1, 2,0), AMR_LSF  (  1,1, 6,0), AMR_LSF  (  1,1, 0,0),
+    AMR_PLAG (0  ,1, 5,0), AMR_PLAG (2  ,1, 5,0), AMR_PLAG (0  ,1, 4,0),
+    AMR_PLAG (2  ,1, 4,0), AMR_PLAG (0  ,1, 6,0), AMR_PLAG (2  ,1, 6,0),
+    AMR_PLAG (0  ,1, 7,0), AMR_PLAG (2  ,1, 7,0), AMR_PLAG (0  ,1, 3,0),
+    AMR_PLAG (2  ,1, 3,0), AMR_PLAG (1  ,1, 3,0), AMR_PLAG (3  ,1, 3,0),
+    AMR_PGAIN(0  ,1, 0,0), AMR_PGAIN(1  ,1, 0,0), AMR_PGAIN(2  ,1, 0,0),
+    AMR_PGAIN(3  ,1, 0,0), AMR_PLAG (0  ,1, 2,0), AMR_PLAG (2  ,1, 2,0),
+    AMR_PLAG (1  ,1, 2,0), AMR_PLAG (3  ,1, 2,0), AMR_PGAIN(0  ,1, 1,0),
+    AMR_PGAIN(1  ,1, 1,0), AMR_PGAIN(2  ,1, 1,0), AMR_PGAIN(3  ,1, 1,0),
+    AMR_PLAG (1  ,1, 1,0), AMR_PLAG (3  ,1, 1,0), AMR_PLAG (0  ,1, 1,0),
+    AMR_PLAG (2  ,1, 1,0), AMR_PLAG (0  ,1, 0,0), AMR_PLAG (2  ,1, 0,0),
+    AMR_PGAIN(0  ,1, 2,0), AMR_PGAIN(1  ,1, 2,0), AMR_PGAIN(2  ,1, 2,0),
+    AMR_PGAIN(3  ,1, 2,0), AMR_PGAIN(0  ,1, 3,0), AMR_PGAIN(1  ,1, 3,0),
+    AMR_PGAIN(2  ,1, 3,0), AMR_PGAIN(3  ,1, 3,0), AMR_PGAIN(0  ,1, 4,0),
+    AMR_PGAIN(1  ,1, 4,0), AMR_PGAIN(2  ,1, 4,0), AMR_PGAIN(3  ,1, 4,0),
+    AMR_LSF  (  2,1, 6,0), AMR_LSF  (  2,1, 4,0), AMR_LSF  (  2,2,12,1),
+    AMR_LSF  (  2,2, 7,1), AMR_LSF  (  2,1, 5,0), AMR_LSF  (  2,1, 1,0),
+    AMR_PULSE(3,1,1, 0,0), AMR_PULSE(0,1,1, 1,0), AMR_PULSE(2,1,1, 1,0),
+    AMR_PULSE(3,1,1, 1,0), AMR_PULSE(1,1,2, 0,0), AMR_PULSE(0,1,1, 0,0),
+    AMR_PULSE(2,1,1, 0,0), AMR_LSF  (  2,1, 0,0), AMR_PGAIN(0  ,1, 5,0),
+    AMR_PGAIN(1  ,1, 5,0), AMR_PGAIN(2  ,1, 5,0), AMR_PGAIN(3  ,1, 5,0),
+    AMR_PLAG (1  ,1, 0,0), AMR_PLAG (3  ,1, 0,0), AMR_PULSE(0,0,1, 2,0),
+    AMR_PULSE(1,0,1, 2,0), AMR_PULSE(2,0,1, 2,0), AMR_PULSE(3,0,1, 2,0),
+    AMR_PULSE(0,0,1, 3,0), AMR_PULSE(1,0,1, 3,0), AMR_PULSE(2,0,1, 3,0),
+    AMR_PULSE(3,0,1, 3,0), AMR_PULSE(0,0,1, 6,0), AMR_PULSE(1,0,1, 6,0),
+    AMR_PULSE(2,0,1, 6,0), AMR_PULSE(3,0,1, 6,0), AMR_PULSE(0,0,1, 7,0),
+    AMR_PULSE(1,0,1, 7,0), AMR_PULSE(2,0,1, 7,0), AMR_PULSE(3,0,1, 7,0),
+    AMR_PULSE(0,0,1, 8,0), AMR_PULSE(1,0,1, 8,0), AMR_PULSE(2,0,1, 8,0),
+    AMR_PULSE(3,0,1, 8,0), AMR_PULSE(0,0,1, 0,0), AMR_PULSE(1,0,1, 0,0),
+    AMR_PULSE(2,0,1, 0,0), AMR_PULSE(3,0,1, 0,0), AMR_PULSE(0,0,1, 1,0),
+    AMR_PULSE(1,0,1, 1,0), AMR_PULSE(2,0,1, 1,0), AMR_PULSE(3,0,1, 1,0),
+    AMR_PULSE(0,0,1, 4,0), AMR_PULSE(1,0,1, 4,0), AMR_PULSE(2,0,1, 4,0),
+    AMR_PULSE(3,0,1, 4,0), AMR_PULSE(0,0,1, 5,0), AMR_PULSE(1,0,1, 5,0),
+    AMR_PULSE(2,0,1, 5,0), AMR_PULSE(3,0,1, 5,0)
 };
 
-static const AMROrder order_MODE_67[134] = {
- AMR_LSF  (  0, 7), AMR_LSF  (  0, 6), AMR_LSF  (  0, 3), AMR_LSF  (  0, 4),
- AMR_LSF  (  0, 2), AMR_LSF  (  0, 1), AMR_LSF  (  1, 3), AMR_LSF  (  0, 0),
- AMR_LSF  (  0, 5), AMR_LSF  (  1, 8), AMR_LSF  (  1, 7), AMR_LSF  (  1, 5),
- AMR_LSF  (  1, 1), AMR_LSF  (  1, 4), AMR_LSF  (  1, 2), AMR_LSF  (  1, 6),
- AMR_PLAG (0,   5), AMR_PLAG (2,   5), AMR_PLAG (0,   4), AMR_PLAG (2,   4),
- AMR_PLAG (0,   6), AMR_PLAG (2,   6), AMR_PLAG (0,   7), AMR_PLAG (2,   7),
- AMR_PLAG (0,   3), AMR_PLAG (2,   3), AMR_LSF  (  1, 0), AMR_PLAG (1,   3),
- AMR_PLAG (3,   3), AMR_PLAG (1,   2), AMR_PLAG (3,   2), AMR_PLAG (0,   2),
- AMR_PLAG (2,   2), AMR_PLAG (1,   1), AMR_PLAG (3,   1), AMR_PGAIN(0,   6),
- AMR_PGAIN(1,   6), AMR_PGAIN(2,   6), AMR_PGAIN(3,   6), AMR_PLAG (0,   1),
- AMR_PLAG (2,   1), AMR_PGAIN(0,   3), AMR_PGAIN(1,   3), AMR_PGAIN(2,   3),
- AMR_PGAIN(3,   3), AMR_PGAIN(0,   2), AMR_PGAIN(1,   2), AMR_PGAIN(2,   2),
- AMR_PGAIN(3,   2), AMR_PLAG (1,   0), AMR_PLAG (3,   0), AMR_PLAG (0,   0),
- AMR_PLAG (2,   0), AMR_LSF  (  2, 6), AMR_LSF  (  2, 2), AMR_PGAIN(0,   1),
- AMR_PGAIN(1,   1), AMR_PGAIN(2,   1), AMR_PGAIN(3,   1), AMR_LSF  (  2, 4),
- AMR_LSF  (  2, 3), AMR_LSF  (  2, 7), AMR_LSF  (  2, 8), AMR_LSF  (  2, 5),
- AMR_LSF  (  2, 1), AMR_LSF  (  2, 0), AMR_PGAIN(0,   4), AMR_PGAIN(1,   4),
- AMR_PGAIN(2,   4), AMR_PGAIN(3,   4), AMR_PULSE(0,1, 0), AMR_PULSE(1,1, 0),
- AMR_PULSE(2,1, 0), AMR_PULSE(3,1, 0), AMR_PGAIN(0,   0), AMR_PGAIN(1,   0),
- AMR_PGAIN(2,   0), AMR_PGAIN(3,   0), AMR_PULSE(0,1, 1), AMR_PULSE(1,1, 1),
- AMR_PULSE(2,1, 1), AMR_PULSE(3,1, 1), AMR_PGAIN(3,   5), AMR_PGAIN(2,   5),
- AMR_PGAIN(1,   5), AMR_PGAIN(0,   5), AMR_PULSE(0,1, 2), AMR_PULSE(1,1, 2),
- AMR_PULSE(2,1, 2), AMR_PULSE(3,1, 2), AMR_PULSE(0,0, 2), AMR_PULSE(1,0, 2),
- AMR_PULSE(2,0, 2), AMR_PULSE(3,0, 2), AMR_PULSE(0,0, 5), AMR_PULSE(1,0, 5),
- AMR_PULSE(2,0, 5), AMR_PULSE(3,0, 5), AMR_PULSE(0,0, 6), AMR_PULSE(1,0, 6),
- AMR_PULSE(2,0, 6), AMR_PULSE(3,0, 6), AMR_PULSE(0,0, 9), AMR_PULSE(1,0, 9),
- AMR_PULSE(2,0, 9), AMR_PULSE(3,0, 9), AMR_PULSE(0,0,10), AMR_PULSE(1,0,10),
- AMR_PULSE(2,0,10), AMR_PULSE(3,0,10), AMR_PULSE(0,0, 0), AMR_PULSE(1,0, 0),
- AMR_PULSE(2,0, 0), AMR_PULSE(3,0, 0), AMR_PULSE(0,0, 1), AMR_PULSE(1,0, 1),
- AMR_PULSE(2,0, 1), AMR_PULSE(3,0, 1), AMR_PULSE(0,0, 3), AMR_PULSE(1,0, 3),
- AMR_PULSE(2,0, 3), AMR_PULSE(3,0, 3), AMR_PULSE(0,0, 4), AMR_PULSE(1,0, 4),
- AMR_PULSE(2,0, 4), AMR_PULSE(3,0, 4), AMR_PULSE(0,0, 7), AMR_PULSE(1,0, 7),
- AMR_PULSE(2,0, 7), AMR_PULSE(3,0, 7), AMR_PULSE(0,0, 8), AMR_PULSE(1,0, 8),
- AMR_PULSE(2,0, 8), AMR_PULSE(3,0, 8)
+static AMROrder order_MODE_67[] = {
+    AMR_LSF  (  0,2, 6,0), AMR_LSF  (  0,2,11,1), AMR_LSF  (  0,2, 1,0),
+    AMR_LSF  (  1,1, 3,0), AMR_LSF  (  0,1, 0,0), AMR_LSF  (  0,1, 5,0),
+    AMR_LSF  (  1,2, 7,0), AMR_LSF  (  1,1, 5,0), AMR_LSF  (  1,1, 1,0),
+    AMR_LSF  (  1,1, 4,0), AMR_LSF  (  1,1, 2,0), AMR_LSF  (  1,1, 6,0),
+    AMR_PLAG (0  ,1, 5,0), AMR_PLAG (2  ,1, 5,0), AMR_PLAG (0  ,1, 4,0),
+    AMR_PLAG (2  ,1, 4,0), AMR_PLAG (0  ,1, 6,0), AMR_PLAG (2  ,1, 6,0),
+    AMR_PLAG (0  ,1, 7,0), AMR_PLAG (2  ,1, 7,0), AMR_PLAG (0  ,1, 3,0),
+    AMR_PLAG (2  ,1, 3,0), AMR_LSF  (  1,1, 0,0), AMR_PLAG (1  ,1, 3,0),
+    AMR_PLAG (3  ,1, 3,0), AMR_PLAG (1  ,1, 2,0), AMR_PLAG (3  ,1, 2,0),
+    AMR_PLAG (0  ,1, 2,0), AMR_PLAG (2  ,1, 2,0), AMR_PLAG (1  ,1, 1,0),
+    AMR_PLAG (3  ,1, 1,0), AMR_PGAIN(0  ,1, 6,0), AMR_PGAIN(1  ,1, 6,0),
+    AMR_PGAIN(2  ,1, 6,0), AMR_PGAIN(3  ,1, 6,0), AMR_PLAG (0  ,1, 1,0),
+    AMR_PLAG (2  ,1, 1,0), AMR_PGAIN(0  ,1, 3,0), AMR_PGAIN(1  ,1, 3,0),
+    AMR_PGAIN(2  ,1, 3,0), AMR_PGAIN(3  ,1, 3,0), AMR_PGAIN(0  ,1, 2,0),
+    AMR_PGAIN(1  ,1, 2,0), AMR_PGAIN(2  ,1, 2,0), AMR_PGAIN(3  ,1, 2,0),
+    AMR_PLAG (1  ,1, 0,0), AMR_PLAG (3  ,1, 0,0), AMR_PLAG (0  ,1, 0,0),
+    AMR_PLAG (2  ,1, 0,0), AMR_LSF  (  2,1, 6,0), AMR_LSF  (  2,1, 2,0),
+    AMR_PGAIN(0  ,1, 1,0), AMR_PGAIN(1  ,1, 1,0), AMR_PGAIN(2  ,1, 1,0),
+    AMR_PGAIN(3  ,1, 1,0), AMR_LSF  (  2,2, 3,0), AMR_LSF  (  2,2, 7,1),
+    AMR_LSF  (  2,1, 5,0), AMR_LSF  (  2,2, 0,0), AMR_PGAIN(0  ,1, 4,0),
+    AMR_PGAIN(1  ,1, 4,0), AMR_PGAIN(2  ,1, 4,0), AMR_PGAIN(3  ,1, 4,0),
+    AMR_PULSE(0,1,1, 0,0), AMR_PULSE(1,1,1, 0,0), AMR_PULSE(2,1,1, 0,0),
+    AMR_PULSE(3,1,1, 0,0), AMR_PGAIN(0  ,1, 0,0), AMR_PGAIN(1  ,1, 0,0),
+    AMR_PGAIN(2  ,1, 0,0), AMR_PGAIN(3  ,1, 0,0), AMR_PULSE(0,1,1, 1,0),
+    AMR_PULSE(1,1,1, 1,0), AMR_PULSE(2,1,1, 1,0), AMR_PULSE(3,1,1, 1,0),
+    AMR_PGAIN(3  ,1, 5,0), AMR_PGAIN(2  ,1, 5,0), AMR_PGAIN(1  ,1, 5,0),
+    AMR_PGAIN(0  ,1, 5,0), AMR_PULSE(0,1,1, 2,0), AMR_PULSE(1,1,1, 2,0),
+    AMR_PULSE(2,1,1, 2,0), AMR_PULSE(3,1,1, 2,0), AMR_PULSE(0,0,1, 2,0),
+    AMR_PULSE(1,0,1, 2,0), AMR_PULSE(2,0,1, 2,0), AMR_PULSE(3,0,1, 2,0),
+    AMR_PULSE(0,0,1, 5,0), AMR_PULSE(1,0,1, 5,0), AMR_PULSE(2,0,1, 5,0),
+    AMR_PULSE(3,0,1, 5,0), AMR_PULSE(0,0,1, 6,0), AMR_PULSE(1,0,1, 6,0),
+    AMR_PULSE(2,0,1, 6,0), AMR_PULSE(3,0,1, 6,0), AMR_PULSE(0,0,1, 9,0),
+    AMR_PULSE(1,0,1, 9,0), AMR_PULSE(2,0,1, 9,0), AMR_PULSE(3,0,1, 9,0),
+    AMR_PULSE(0,0,1,10,0), AMR_PULSE(1,0,1,10,0), AMR_PULSE(2,0,1,10,0),
+    AMR_PULSE(3,0,1,10,0), AMR_PULSE(0,0,1, 0,0), AMR_PULSE(1,0,1, 0,0),
+    AMR_PULSE(2,0,1, 0,0), AMR_PULSE(3,0,1, 0,0), AMR_PULSE(0,0,1, 1,0),
+    AMR_PULSE(1,0,1, 1,0), AMR_PULSE(2,0,1, 1,0), AMR_PULSE(3,0,1, 1,0),
+    AMR_PULSE(0,0,1, 3,0), AMR_PULSE(1,0,1, 3,0), AMR_PULSE(2,0,1, 3,0),
+    AMR_PULSE(3,0,1, 3,0), AMR_PULSE(0,0,1, 4,0), AMR_PULSE(1,0,1, 4,0),
+    AMR_PULSE(2,0,1, 4,0), AMR_PULSE(3,0,1, 4,0), AMR_PULSE(0,0,1, 7,0),
+    AMR_PULSE(1,0,1, 7,0), AMR_PULSE(2,0,1, 7,0), AMR_PULSE(3,0,1, 7,0),
+    AMR_PULSE(0,0,1, 8,0), AMR_PULSE(1,0,1, 8,0), AMR_PULSE(2,0,1, 8,0),
+    AMR_PULSE(3,0,1, 8,0)
 };
 
-static const AMROrder order_MODE_74[148] = {
- AMR_LSF  (  0, 7), AMR_LSF  (  0, 6), AMR_LSF  (  0, 5), AMR_LSF  (  0, 4),
- AMR_LSF  (  0, 3), AMR_LSF  (  0, 2), AMR_LSF  (  0, 1), AMR_LSF  (  0, 0),
- AMR_LSF  (  1, 8), AMR_LSF  (  1, 7), AMR_LSF  (  1, 6), AMR_LSF  (  1, 5),
- AMR_LSF  (  1, 4), AMR_LSF  (  1, 3), AMR_LSF  (  1, 2), AMR_LSF  (  1, 1),
- AMR_LSF  (  1, 0), AMR_PLAG (0,   7), AMR_PLAG (2,   7), AMR_PLAG (0,   6),
- AMR_PLAG (2,   6), AMR_PLAG (0,   5), AMR_PLAG (2,   5), AMR_PLAG (0,   4),
- AMR_PLAG (2,   4), AMR_PLAG (0,   3), AMR_PLAG (2,   3), AMR_PGAIN(0,   6),
- AMR_PGAIN(1,   6), AMR_PGAIN(2,   6), AMR_PGAIN(3,   6), AMR_PGAIN(0,   5),
- AMR_PGAIN(1,   5), AMR_PGAIN(2,   5), AMR_PGAIN(3,   5), AMR_PGAIN(0,   3),
- AMR_PGAIN(1,   3), AMR_PGAIN(2,   3), AMR_PGAIN(3,   3), AMR_PGAIN(0,   2),
- AMR_PGAIN(1,   2), AMR_PGAIN(2,   2), AMR_PGAIN(3,   2), AMR_PLAG (1,   4),
- AMR_PLAG (3,   4), AMR_PLAG (1,   3), AMR_PLAG (3,   3), AMR_LSF  (  2, 4),
- AMR_LSF  (  2, 3), AMR_LSF  (  2, 2), AMR_LSF  (  2, 8), AMR_LSF  (  2, 7),
- AMR_LSF  (  2, 6), AMR_PLAG (0,   2), AMR_PLAG (1,   2), AMR_PLAG (2,   2),
- AMR_PLAG (3,   2), AMR_PGAIN(0,   1), AMR_PGAIN(1,   1), AMR_PGAIN(2,   1),
- AMR_PGAIN(3,   1), AMR_LSF  (  2, 5), AMR_LSF  (  2, 1), AMR_LSF  (  2, 0),
- AMR_PULSE(0,1, 0), AMR_PULSE(1,1, 0), AMR_PULSE(2,1, 0), AMR_PULSE(3,1, 0),
- AMR_PGAIN(0,   0), AMR_PGAIN(1,   0), AMR_PGAIN(2,   0), AMR_PGAIN(3,   0),
- AMR_PULSE(0,1, 1), AMR_PULSE(1,1, 1), AMR_PULSE(2,1, 1), AMR_PULSE(3,1, 1),
- AMR_PULSE(0,1, 2), AMR_PULSE(1,1, 2), AMR_PGAIN(0,   4), AMR_PGAIN(1,   4),
- AMR_PGAIN(2,   4), AMR_PGAIN(3,   4), AMR_PULSE(2,1, 2), AMR_PULSE(3,1, 2),
- AMR_PULSE(0,1, 3), AMR_PULSE(1,1, 3), AMR_PULSE(2,1, 3), AMR_PULSE(3,1, 3),
- AMR_PLAG (0,   1), AMR_PLAG (0,   0), AMR_PLAG (1,   1), AMR_PLAG (1,   0),
- AMR_PLAG (2,   1), AMR_PLAG (2,   0), AMR_PLAG (3,   1), AMR_PLAG (3,   0),
- AMR_PULSE(0,0, 5), AMR_PULSE(0,0, 4), AMR_PULSE(0,0, 3), AMR_PULSE(0,0, 2),
- AMR_PULSE(0,0, 1), AMR_PULSE(0,0, 0), AMR_PULSE(1,0, 5), AMR_PULSE(1,0, 4),
- AMR_PULSE(1,0, 3), AMR_PULSE(1,0, 2), AMR_PULSE(1,0, 1), AMR_PULSE(1,0, 0),
- AMR_PULSE(2,0, 5), AMR_PULSE(2,0, 4), AMR_PULSE(2,0, 3), AMR_PULSE(2,0, 2),
- AMR_PULSE(2,0, 1), AMR_PULSE(2,0, 0), AMR_PULSE(3,0, 5), AMR_PULSE(3,0, 4),
- AMR_PULSE(3,0, 3), AMR_PULSE(3,0, 2), AMR_PULSE(3,0, 1), AMR_PULSE(3,0, 0),
- AMR_PULSE(0,0,12), AMR_PULSE(1,0,12), AMR_PULSE(2,0,12), AMR_PULSE(3,0,12),
- AMR_PULSE(0,0,11), AMR_PULSE(1,0,11), AMR_PULSE(2,0,11), AMR_PULSE(3,0,11),
- AMR_PULSE(0,0,10), AMR_PULSE(1,0,10), AMR_PULSE(2,0,10), AMR_PULSE(3,0,10),
- AMR_PULSE(0,0, 9), AMR_PULSE(1,0, 9), AMR_PULSE(2,0, 9), AMR_PULSE(3,0, 9),
- AMR_PULSE(0,0, 8), AMR_PULSE(1,0, 8), AMR_PULSE(2,0, 8), AMR_PULSE(3,0, 8),
- AMR_PULSE(0,0, 7), AMR_PULSE(1,0, 7), AMR_PULSE(2,0, 7), AMR_PULSE(3,0, 7),
- AMR_PULSE(0,0, 6), AMR_PULSE(1,0, 6), AMR_PULSE(2,0, 6), AMR_PULSE(3,0, 6)
+static AMROrder order_MODE_74[] = {
+    AMR_LSF  (  0,8, 0,0), AMR_LSF  (  1,9, 0,0), AMR_PLAG (0  ,1, 7,0),
+    AMR_PLAG (2  ,1, 7,0), AMR_PLAG (0  ,1, 6,0), AMR_PLAG (2  ,1, 6,0),
+    AMR_PLAG (0  ,1, 5,0), AMR_PLAG (2  ,1, 5,0), AMR_PLAG (0  ,1, 4,0),
+    AMR_PLAG (2  ,1, 4,0), AMR_PLAG (0  ,1, 3,0), AMR_PLAG (2  ,1, 3,0),
+    AMR_PGAIN(0  ,1, 6,0), AMR_PGAIN(1  ,1, 6,0), AMR_PGAIN(2  ,1, 6,0),
+    AMR_PGAIN(3  ,1, 6,0), AMR_PGAIN(0  ,1, 5,0), AMR_PGAIN(1  ,1, 5,0),
+    AMR_PGAIN(2  ,1, 5,0), AMR_PGAIN(3  ,1, 5,0), AMR_PGAIN(0  ,1, 3,0),
+    AMR_PGAIN(1  ,1, 3,0), AMR_PGAIN(2  ,1, 3,0), AMR_PGAIN(3  ,1, 3,0),
+    AMR_PGAIN(0  ,1, 2,0), AMR_PGAIN(1  ,1, 2,0), AMR_PGAIN(2  ,1, 2,0),
+    AMR_PGAIN(3  ,1, 2,0), AMR_PLAG (1  ,1, 4,0), AMR_PLAG (3  ,1, 4,0),
+    AMR_PLAG (1  ,1, 3,0), AMR_PLAG (3  ,1, 3,0), AMR_LSF  (  2,3, 2,0),
+    AMR_LSF  (  2,3, 6,0), AMR_PLAG (0  ,1, 2,0), AMR_PLAG (1  ,1, 2,0),
+    AMR_PLAG (2  ,1, 2,0), AMR_PLAG (3  ,1, 2,0), AMR_PGAIN(0  ,1, 1,0),
+    AMR_PGAIN(1  ,1, 1,0), AMR_PGAIN(2  ,1, 1,0), AMR_PGAIN(3  ,1, 1,0),
+    AMR_LSF  (  2,1, 5,0), AMR_LSF  (  2,2, 0,0), AMR_PULSE(0,1,1, 0,0),
+    AMR_PULSE(1,1,1, 0,0), AMR_PULSE(2,1,1, 0,0), AMR_PULSE(3,1,1, 0,0),
+    AMR_PGAIN(0  ,1, 0,0), AMR_PGAIN(1  ,1, 0,0), AMR_PGAIN(2  ,1, 0,0),
+    AMR_PGAIN(3  ,1, 0,0), AMR_PULSE(0,1,1, 1,0), AMR_PULSE(1,1,1, 1,0),
+    AMR_PULSE(2,1,1, 1,0), AMR_PULSE(3,1,1, 1,0), AMR_PULSE(0,1,1, 2,0),
+    AMR_PULSE(1,1,1, 2,0), AMR_PGAIN(0  ,1, 4,0), AMR_PGAIN(1  ,1, 4,0),
+    AMR_PGAIN(2  ,1, 4,0), AMR_PGAIN(3  ,1, 4,0), AMR_PULSE(2,1,1, 2,0),
+    AMR_PULSE(3,1,1, 2,0), AMR_PULSE(0,1,1, 3,0), AMR_PULSE(1,1,1, 3,0),
+    AMR_PULSE(2,1,1, 3,0), AMR_PULSE(3,1,1, 3,0), AMR_PLAG (0  ,2, 0,0),
+    AMR_PLAG (1  ,2, 0,0), AMR_PLAG (2  ,2, 0,0), AMR_PLAG (3  ,2, 0,0),
+    AMR_PULSE(0,0,6, 0,0), AMR_PULSE(1,0,6, 0,0), AMR_PULSE(2,0,6, 0,0),
+    AMR_PULSE(3,0,6, 0,0), AMR_PULSE(0,0,1,12,0), AMR_PULSE(1,0,1,12,0),
+    AMR_PULSE(2,0,1,12,0), AMR_PULSE(3,0,1,12,0), AMR_PULSE(0,0,1,11,0),
+    AMR_PULSE(1,0,1,11,0), AMR_PULSE(2,0,1,11,0), AMR_PULSE(3,0,1,11,0),
+    AMR_PULSE(0,0,1,10,0), AMR_PULSE(1,0,1,10,0), AMR_PULSE(2,0,1,10,0),
+    AMR_PULSE(3,0,1,10,0), AMR_PULSE(0,0,1, 9,0), AMR_PULSE(1,0,1, 9,0),
+    AMR_PULSE(2,0,1, 9,0), AMR_PULSE(3,0,1, 9,0), AMR_PULSE(0,0,1, 8,0),
+    AMR_PULSE(1,0,1, 8,0), AMR_PULSE(2,0,1, 8,0), AMR_PULSE(3,0,1, 8,0),
+    AMR_PULSE(0,0,1, 7,0), AMR_PULSE(1,0,1, 7,0), AMR_PULSE(2,0,1, 7,0),
+    AMR_PULSE(3,0,1, 7,0), AMR_PULSE(0,0,1, 6,0), AMR_PULSE(1,0,1, 6,0),
+    AMR_PULSE(2,0,1, 6,0), AMR_PULSE(3,0,1, 6,0)
 };
 
-static const AMROrder order_MODE_795[159] = {
- AMR_LSF  (  0, 0), AMR_LSF  (  0, 1), AMR_LSF  (  0, 2), AMR_LSF  (  0, 3),
- AMR_LSF  (  0, 4), AMR_LSF  (  0, 5), AMR_LSF  (  0, 6), AMR_LSF  (  1, 3),
- AMR_LSF  (  1, 1), AMR_LSF  (  1, 8), AMR_LSF  (  1, 7), AMR_LSF  (  1, 5),
- AMR_LSF  (  1, 4), AMR_LSF  (  1, 2), AMR_LSF  (  1, 6), AMR_LSF  (  1, 0),
- AMR_LSF  (  2, 6), AMR_LSF  (  2, 4), AMR_LSF  (  2, 2), AMR_LSF  (  2, 3),
- AMR_LSF  (  2, 7), AMR_LSF  (  2, 8), AMR_LSF  (  2, 5), AMR_FGAIN(0,   4),
- AMR_FGAIN(1,   4), AMR_FGAIN(2,   4), AMR_FGAIN(3,   4), AMR_FGAIN(0,   3),
- AMR_FGAIN(1,   3), AMR_FGAIN(2,   3), AMR_FGAIN(3,   3), AMR_FGAIN(0,   2),
- AMR_FGAIN(1,   2), AMR_FGAIN(2,   2), AMR_FGAIN(3,   2), AMR_PGAIN(0,   3),
- AMR_PGAIN(1,   3), AMR_PGAIN(2,   3), AMR_PGAIN(3,   3), AMR_PGAIN(0,   2),
- AMR_PGAIN(1,   2), AMR_PGAIN(2,   2), AMR_PGAIN(3,   2), AMR_PLAG (0,   7),
- AMR_PLAG (2,   7), AMR_PLAG (0,   6), AMR_PLAG (2,   6), AMR_PLAG (0,   5),
- AMR_PLAG (2,   5), AMR_PLAG (0,   4), AMR_PLAG (2,   4), AMR_PLAG (0,   3),
- AMR_PLAG (2,   3), AMR_PLAG (1,   5), AMR_PLAG (3,   5), AMR_PLAG (1,   4),
- AMR_PLAG (3,   4), AMR_PLAG (1,   3), AMR_PLAG (3,   3), AMR_FGAIN(0,   1),
- AMR_FGAIN(1,   1), AMR_FGAIN(2,   1), AMR_FGAIN(3,   1), AMR_PLAG (0,   2),
- AMR_PLAG (2,   2), AMR_PLAG (1,   2), AMR_PLAG (3,   2), AMR_LSF  (  0, 7),
- AMR_LSF  (  0, 8), AMR_LSF  (  2, 1), AMR_LSF  (  2, 0), AMR_PLAG (0,   1),
- AMR_PLAG (2,   1), AMR_PLAG (0,   0), AMR_PLAG (2,   0), AMR_PLAG (1,   1),
- AMR_PLAG (3,   1), AMR_PLAG (1,   0), AMR_PLAG (3,   0), AMR_PGAIN(0,   1),
- AMR_PGAIN(1,   1), AMR_PGAIN(2,   1), AMR_PGAIN(3,   1), AMR_FGAIN(0,   0),
- AMR_FGAIN(1,   0), AMR_FGAIN(2,   0), AMR_FGAIN(3,   0), AMR_PGAIN(0,   0),
- AMR_PGAIN(1,   0), AMR_PGAIN(2,   0), AMR_PGAIN(3,   0), AMR_PULSE(2,1, 0),
- AMR_PULSE(2,1, 1), AMR_PULSE(2,1, 2), AMR_PULSE(0,0, 1), AMR_PULSE(1,0, 1),
- AMR_PULSE(2,0, 1), AMR_PULSE(3,0, 1), AMR_PULSE(0,0, 4), AMR_PULSE(1,0, 4),
- AMR_PULSE(2,0, 4), AMR_PULSE(3,0, 4), AMR_PULSE(0,0, 7), AMR_PULSE(1,0, 7),
- AMR_PULSE(2,0, 7), AMR_PULSE(3,0, 7), AMR_PULSE(0,0,11), AMR_PULSE(1,0,11),
- AMR_PULSE(2,0,11), AMR_PULSE(3,0,11), AMR_PULSE(2,1, 3), AMR_PULSE(3,1, 0),
- AMR_PULSE(3,1, 1), AMR_PULSE(3,1, 2), AMR_PULSE(3,1, 3), AMR_PULSE(1,1, 0),
- AMR_PULSE(1,1, 1), AMR_PULSE(1,1, 2), AMR_PULSE(1,1, 3), AMR_PULSE(0,1, 0),
- AMR_PULSE(0,1, 1), AMR_PULSE(0,1, 2), AMR_PULSE(0,1, 3), AMR_PULSE(0,0, 0),
- AMR_PULSE(0,0, 2), AMR_PULSE(0,0, 3), AMR_PULSE(0,0, 5), AMR_PULSE(0,0, 8),
- AMR_PULSE(0,0,12), AMR_PULSE(1,0, 0), AMR_PULSE(1,0, 2), AMR_PULSE(1,0, 3),
- AMR_PULSE(1,0, 5), AMR_PULSE(1,0, 8), AMR_PULSE(1,0,12), AMR_PULSE(2,0, 0),
- AMR_PULSE(2,0, 2), AMR_PULSE(2,0, 3), AMR_PULSE(2,0, 5), AMR_PULSE(2,0, 8),
- AMR_PULSE(2,0,12), AMR_PULSE(3,0, 0), AMR_PULSE(3,0, 2), AMR_PULSE(3,0, 3),
- AMR_PULSE(3,0, 5), AMR_PULSE(3,0, 8), AMR_PULSE(3,0,12), AMR_PULSE(0,0, 6),
- AMR_PULSE(1,0, 6), AMR_PULSE(2,0, 6), AMR_PULSE(3,0, 6), AMR_PULSE(0,0,10),
- AMR_PULSE(1,0,10), AMR_PULSE(2,0,10), AMR_PULSE(3,0,10), AMR_PULSE(0,0, 9),
- AMR_PULSE(1,0, 9), AMR_PULSE(2,0, 9), AMR_PULSE(3,0, 9)
+static AMROrder order_MODE_795[] = {
+    AMR_LSF  (  0,7, 9,1), AMR_LSF  (  1,1, 3,0), AMR_LSF  (  1,1, 1,0),
+    AMR_LSF  (  1,2, 7,0), AMR_LSF  (  1,2, 4,0), AMR_LSF  (  1,1, 2,0),
+    AMR_LSF  (  1,1, 6,0), AMR_LSF  (  1,1, 0,0), AMR_LSF  (  2,1, 6,0),
+    AMR_LSF  (  2,1, 4,0), AMR_LSF  (  2,2,12,1), AMR_LSF  (  2,2, 7,1),
+    AMR_LSF  (  2,1, 5,0), AMR_FGAIN(0  ,1, 4,0), AMR_FGAIN(1  ,1, 4,0),
+    AMR_FGAIN(2  ,1, 4,0), AMR_FGAIN(3  ,1, 4,0), AMR_FGAIN(0  ,1, 3,0),
+    AMR_FGAIN(1  ,1, 3,0), AMR_FGAIN(2  ,1, 3,0), AMR_FGAIN(3  ,1, 3,0),
+    AMR_FGAIN(0  ,1, 2,0), AMR_FGAIN(1  ,1, 2,0), AMR_FGAIN(2  ,1, 2,0),
+    AMR_FGAIN(3  ,1, 2,0), AMR_PGAIN(0  ,1, 3,0), AMR_PGAIN(1  ,1, 3,0),
+    AMR_PGAIN(2  ,1, 3,0), AMR_PGAIN(3  ,1, 3,0), AMR_PGAIN(0  ,1, 2,0),
+    AMR_PGAIN(1  ,1, 2,0), AMR_PGAIN(2  ,1, 2,0), AMR_PGAIN(3  ,1, 2,0),
+    AMR_PLAG (0  ,1, 7,0), AMR_PLAG (2  ,1, 7,0), AMR_PLAG (0  ,1, 6,0),
+    AMR_PLAG (2  ,1, 6,0), AMR_PLAG (0  ,1, 5,0), AMR_PLAG (2  ,1, 5,0),
+    AMR_PLAG (0  ,1, 4,0), AMR_PLAG (2  ,1, 4,0), AMR_PLAG (0  ,1, 3,0),
+    AMR_PLAG (2  ,1, 3,0), AMR_PLAG (1  ,1, 5,0), AMR_PLAG (3  ,1, 5,0),
+    AMR_PLAG (1  ,1, 4,0), AMR_PLAG (3  ,1, 4,0), AMR_PLAG (1  ,1, 3,0),
+    AMR_PLAG (3  ,1, 3,0), AMR_FGAIN(0  ,1, 1,0), AMR_FGAIN(1  ,1, 1,0),
+    AMR_FGAIN(2  ,1, 1,0), AMR_FGAIN(3  ,1, 1,0), AMR_PLAG (0  ,1, 2,0),
+    AMR_PLAG (2  ,1, 2,0), AMR_PLAG (1  ,1, 2,0), AMR_PLAG (3  ,1, 2,0),
+    AMR_LSF  (  0,2, 7,1), AMR_LSF  (  2,2, 0,0), AMR_PLAG (0  ,1, 1,0),
+    AMR_PLAG (2  ,1, 1,0), AMR_PLAG (0  ,1, 0,0), AMR_PLAG (2  ,1, 0,0),
+    AMR_PLAG (1  ,1, 1,0), AMR_PLAG (3  ,1, 1,0), AMR_PLAG (1  ,1, 0,0),
+    AMR_PLAG (3  ,1, 0,0), AMR_PGAIN(0  ,1, 1,0), AMR_PGAIN(1  ,1, 1,0),
+    AMR_PGAIN(2  ,1, 1,0), AMR_PGAIN(3  ,1, 1,0), AMR_FGAIN(0  ,1, 0,0),
+    AMR_FGAIN(1  ,1, 0,0), AMR_FGAIN(2  ,1, 0,0), AMR_FGAIN(3  ,1, 0,0),
+    AMR_PGAIN(0  ,1, 0,0), AMR_PGAIN(1  ,1, 0,0), AMR_PGAIN(2  ,1, 0,0),
+    AMR_PGAIN(3  ,1, 0,0), AMR_PULSE(2,1,3,13,1), AMR_PULSE(0,0,1, 1,0),
+    AMR_PULSE(1,0,1, 1,0), AMR_PULSE(2,0,1, 1,0), AMR_PULSE(3,0,1, 1,0),
+    AMR_PULSE(0,0,1, 4,0), AMR_PULSE(1,0,1, 4,0), AMR_PULSE(2,0,1, 4,0),
+    AMR_PULSE(3,0,1, 4,0), AMR_PULSE(0,0,1, 7,0), AMR_PULSE(1,0,1, 7,0),
+    AMR_PULSE(2,0,1, 7,0), AMR_PULSE(3,0,1, 7,0), AMR_PULSE(0,0,1,11,0),
+    AMR_PULSE(1,0,1,11,0), AMR_PULSE(2,0,1,11,0), AMR_PULSE(3,0,1,11,0),
+    AMR_PULSE(2,1,1, 3,0), AMR_PULSE(3,1,4,12,1), AMR_PULSE(1,1,4,12,1),
+    AMR_PULSE(0,1,4,12,1), AMR_PULSE(0,0,1, 0,0), AMR_PULSE(0,0,2,12,1),
+    AMR_PULSE(0,0,1, 5,0), AMR_PULSE(0,0,1, 8,0), AMR_PULSE(0,0,1,12,0),
+    AMR_PULSE(1,0,1, 0,0), AMR_PULSE(1,0,2,12,1), AMR_PULSE(1,0,1, 5,0),
+    AMR_PULSE(1,0,1, 8,0), AMR_PULSE(1,0,1,12,0), AMR_PULSE(2,0,1, 0,0),
+    AMR_PULSE(2,0,2,12,1), AMR_PULSE(2,0,1, 5,0), AMR_PULSE(2,0,1, 8,0),
+    AMR_PULSE(2,0,1,12,0), AMR_PULSE(3,0,1, 0,0), AMR_PULSE(3,0,2,12,1),
+    AMR_PULSE(3,0,1, 5,0), AMR_PULSE(3,0,1, 8,0), AMR_PULSE(3,0,1,12,0),
+    AMR_PULSE(0,0,1, 6,0), AMR_PULSE(1,0,1, 6,0), AMR_PULSE(2,0,1, 6,0),
+    AMR_PULSE(3,0,1, 6,0), AMR_PULSE(0,0,1,10,0), AMR_PULSE(1,0,1,10,0),
+    AMR_PULSE(2,0,1,10,0), AMR_PULSE(3,0,1,10,0), AMR_PULSE(0,0,1, 9,0),
+    AMR_PULSE(1,0,1, 9,0), AMR_PULSE(2,0,1, 9,0), AMR_PULSE(3,0,1, 9,0)
 };
 
-static const AMROrder order_MODE_102[204] = {
- AMR_LSF  (  0, 0), AMR_LSF  (  0, 1), AMR_LSF  (  0, 2), AMR_LSF  (  0, 3),
- AMR_LSF  (  0, 4), AMR_LSF  (  0, 5), AMR_LSF  (  0, 6), AMR_LSF  (  0, 7),
- AMR_LSF  (  1, 0), AMR_LSF  (  1, 1), AMR_LSF  (  1, 2), AMR_LSF  (  1, 3),
- AMR_LSF  (  1, 4), AMR_LSF  (  1, 5), AMR_LSF  (  1, 6), AMR_LSF  (  1, 7),
- AMR_LSF  (  1, 8), AMR_PLAG (0,   7), AMR_PLAG (0,   6), AMR_PLAG (0,   5),
- AMR_PLAG (0,   4), AMR_PLAG (0,   3), AMR_PLAG (0,   2), AMR_PLAG (2,   7),
- AMR_PLAG (2,   6), AMR_PLAG (2,   5), AMR_PLAG (2,   4), AMR_PLAG (2,   3),
- AMR_PLAG (2,   2), AMR_PLAG (1,   4), AMR_PLAG (1,   3), AMR_PLAG (3,   4),
- AMR_PLAG (3,   3), AMR_PGAIN(0,   6), AMR_PGAIN(0,   3), AMR_PGAIN(0,   2),
- AMR_PGAIN(1,   6), AMR_PGAIN(1,   3), AMR_PGAIN(1,   2), AMR_PGAIN(2,   6),
- AMR_PGAIN(2,   3), AMR_PGAIN(2,   2), AMR_PGAIN(3,   6), AMR_PGAIN(3,   3),
- AMR_PGAIN(3,   2), AMR_PLAG (0,   1), AMR_PLAG (0,   0), AMR_PLAG (2,   1),
- AMR_PLAG (2,   0), AMR_PLAG (1,   2), AMR_PLAG (1,   1), AMR_PLAG (3,   2),
- AMR_PLAG (3,   1), AMR_PGAIN(0,   5), AMR_PGAIN(1,   5), AMR_PGAIN(2,   5),
- AMR_PGAIN(3,   5), AMR_LSF  (  2, 6), AMR_LSF  (  2, 2), AMR_LSF  (  2, 4),
- AMR_LSF  (  2, 3), AMR_LSF  (  2, 7), AMR_LSF  (  2, 8), AMR_LSF  (  2, 5),
- AMR_LSF  (  2, 1), AMR_LSF  (  2, 0), AMR_PULSE(0,3, 0), AMR_PULSE(0,2, 0),
- AMR_PULSE(0,1, 0), AMR_PULSE(0,0, 0), AMR_PULSE(1,3, 0), AMR_PULSE(1,2, 0),
- AMR_PULSE(1,1, 0), AMR_PULSE(1,0, 0), AMR_PULSE(2,3, 0), AMR_PULSE(2,2, 0),
- AMR_PULSE(2,1, 0), AMR_PULSE(2,0, 0), AMR_PULSE(3,3, 0), AMR_PULSE(3,2, 0),
- AMR_PULSE(3,1, 0), AMR_PULSE(3,0, 0), AMR_PGAIN(0,   1), AMR_PGAIN(0,   4),
- AMR_PGAIN(0,   0), AMR_PGAIN(1,   1), AMR_PGAIN(1,   4), AMR_PGAIN(1,   0),
- AMR_PGAIN(2,   1), AMR_PGAIN(2,   4), AMR_PGAIN(2,   0), AMR_PGAIN(3,   1),
- AMR_PGAIN(3,   4), AMR_PGAIN(3,   0), AMR_PLAG (1,   0), AMR_PLAG (3,   0),
- AMR_PULSE(1,4, 9), AMR_PULSE(1,4, 8), AMR_PULSE(1,5, 8), AMR_PULSE(1,5, 9),
- AMR_PULSE(1,5, 7), AMR_PULSE(1,4, 7), AMR_PULSE(1,5, 5), AMR_PULSE(1,4, 5),
- AMR_PULSE(1,4, 6), AMR_PULSE(1,5, 6), AMR_PULSE(1,6, 6), AMR_PULSE(1,6, 5),
- AMR_PULSE(1,5, 4), AMR_PULSE(1,6, 3), AMR_PULSE(1,4, 4), AMR_PULSE(1,6, 4),
- AMR_PULSE(1,4, 3), AMR_PULSE(1,5, 3), AMR_PULSE(2,4, 9), AMR_PULSE(2,4, 8),
- AMR_PULSE(2,5, 8), AMR_PULSE(2,5, 9), AMR_PULSE(2,5, 7), AMR_PULSE(2,4, 7),
- AMR_PULSE(2,5, 5), AMR_PULSE(2,4, 5), AMR_PULSE(2,4, 6), AMR_PULSE(2,5, 6),
- AMR_PULSE(2,6, 6), AMR_PULSE(2,6, 5), AMR_PULSE(2,5, 4), AMR_PULSE(2,6, 3),
- AMR_PULSE(2,4, 4), AMR_PULSE(2,6, 4), AMR_PULSE(2,4, 3), AMR_PULSE(2,5, 3),
- AMR_PULSE(3,4, 9), AMR_PULSE(3,4, 8), AMR_PULSE(3,5, 8), AMR_PULSE(3,5, 9),
- AMR_PULSE(3,5, 7), AMR_PULSE(3,4, 7), AMR_PULSE(3,5, 5), AMR_PULSE(3,4, 5),
- AMR_PULSE(3,4, 6), AMR_PULSE(3,5, 6), AMR_PULSE(3,6, 6), AMR_PULSE(3,6, 5),
- AMR_PULSE(3,5, 4), AMR_PULSE(3,6, 3), AMR_PULSE(3,4, 4), AMR_PULSE(3,6, 4),
- AMR_PULSE(3,4, 3), AMR_PULSE(3,5, 3), AMR_PULSE(0,4, 9), AMR_PULSE(0,4, 8),
- AMR_PULSE(0,5, 8), AMR_PULSE(0,5, 9), AMR_PULSE(0,5, 7), AMR_PULSE(0,4, 7),
- AMR_PULSE(0,5, 5), AMR_PULSE(0,4, 5), AMR_PULSE(0,4, 6), AMR_PULSE(0,5, 6),
- AMR_PULSE(0,6, 6), AMR_PULSE(0,6, 5), AMR_PULSE(0,5, 4), AMR_PULSE(0,6, 3),
- AMR_PULSE(0,4, 4), AMR_PULSE(0,6, 4), AMR_PULSE(0,4, 3), AMR_PULSE(0,5, 3),
- AMR_PULSE(3,6, 2), AMR_PULSE(3,4, 0), AMR_PULSE(3,5, 0), AMR_PULSE(3,6, 0),
- AMR_PULSE(3,4, 2), AMR_PULSE(3,6, 1), AMR_PULSE(3,4, 1), AMR_PULSE(3,5, 2),
- AMR_PULSE(3,5, 1), AMR_PULSE(2,6, 2), AMR_PULSE(2,4, 0), AMR_PULSE(2,5, 0),
- AMR_PULSE(2,6, 0), AMR_PULSE(2,4, 2), AMR_PULSE(2,6, 1), AMR_PULSE(2,4, 1),
- AMR_PULSE(2,5, 2), AMR_PULSE(2,5, 1), AMR_PULSE(1,6, 2), AMR_PULSE(1,4, 0),
- AMR_PULSE(1,5, 0), AMR_PULSE(1,6, 0), AMR_PULSE(1,4, 2), AMR_PULSE(1,6, 1),
- AMR_PULSE(1,4, 1), AMR_PULSE(1,5, 2), AMR_PULSE(1,5, 1), AMR_PULSE(0,6, 2),
- AMR_PULSE(0,4, 0), AMR_PULSE(0,5, 0), AMR_PULSE(0,6, 0), AMR_PULSE(0,4, 2),
- AMR_PULSE(0,6, 1), AMR_PULSE(0,4, 1), AMR_PULSE(0,5, 2), AMR_PULSE(0,5, 1)
+static AMROrder order_MODE_102[] = {
+    AMR_LSF  (  0,8, 8,1), AMR_LSF  (  1,9, 7,1), AMR_PLAG (0  ,6, 2,0),
+    AMR_PLAG (2  ,6, 2,0), AMR_PLAG (1  ,2, 3,0), AMR_PLAG (3  ,2, 3,0),
+    AMR_PGAIN(0  ,1, 6,0), AMR_PGAIN(0  ,2, 2,0), AMR_PGAIN(1  ,1, 6,0),
+    AMR_PGAIN(1  ,2, 2,0), AMR_PGAIN(2  ,1, 6,0), AMR_PGAIN(2  ,2, 2,0),
+    AMR_PGAIN(3  ,1, 6,0), AMR_PGAIN(3  ,2, 2,0), AMR_PLAG (0  ,2, 0,0),
+    AMR_PLAG (2  ,2, 0,0), AMR_PLAG (1  ,2, 1,0), AMR_PLAG (3  ,2, 1,0),
+    AMR_PGAIN(0  ,1, 5,0), AMR_PGAIN(1  ,1, 5,0), AMR_PGAIN(2  ,1, 5,0),
+    AMR_PGAIN(3  ,1, 5,0), AMR_LSF  (  2,1, 6,0), AMR_LSF  (  2,1, 2,0),
+    AMR_LSF  (  2,2, 3,0), AMR_LSF  (  2,2, 7,1), AMR_LSF  (  2,1, 5,0),
+    AMR_LSF  (  2,2, 0,0), AMR_PULSE(0,3,1, 0,0), AMR_PULSE(0,2,1, 0,0),
+    AMR_PULSE(0,1,1, 0,0), AMR_PULSE(0,0,1, 0,0), AMR_PULSE(1,3,1, 0,0),
+    AMR_PULSE(1,2,1, 0,0), AMR_PULSE(1,1,1, 0,0), AMR_PULSE(1,0,1, 0,0),
+    AMR_PULSE(2,3,1, 0,0), AMR_PULSE(2,2,1, 0,0), AMR_PULSE(2,1,1, 0,0),
+    AMR_PULSE(2,0,1, 0,0), AMR_PULSE(3,3,1, 0,0), AMR_PULSE(3,2,1, 0,0),
+    AMR_PULSE(3,1,1, 0,0), AMR_PULSE(3,0,1, 0,0), AMR_PGAIN(0  ,1, 1,0),
+    AMR_PGAIN(0  ,1, 4,0), AMR_PGAIN(0  ,1, 0,0), AMR_PGAIN(1  ,1, 1,0),
+    AMR_PGAIN(1  ,1, 4,0), AMR_PGAIN(1  ,1, 0,0), AMR_PGAIN(2  ,1, 1,0),
+    AMR_PGAIN(2  ,1, 4,0), AMR_PGAIN(2  ,1, 0,0), AMR_PGAIN(3  ,1, 1,0),
+    AMR_PGAIN(3  ,1, 4,0), AMR_PGAIN(3  ,1, 0,0), AMR_PLAG (1  ,1, 0,0),
+    AMR_PLAG (3  ,1, 0,0), AMR_PULSE(1,4,2, 8,0), AMR_PULSE(1,5,2, 6,1),
+    AMR_PULSE(1,5,1, 7,0), AMR_PULSE(1,4,1, 7,0), AMR_PULSE(1,5,1, 5,0),
+    AMR_PULSE(1,4,2, 9,1), AMR_PULSE(1,5,1, 6,0), AMR_PULSE(1,6,2, 5,0),
+    AMR_PULSE(1,5,1, 4,0), AMR_PULSE(1,6,1, 3,0), AMR_PULSE(1,4,1, 4,0),
+    AMR_PULSE(1,6,1, 4,0), AMR_PULSE(1,4,1, 3,0), AMR_PULSE(1,5,1, 3,0),
+    AMR_PULSE(2,4,2, 8,0), AMR_PULSE(2,5,2, 6,1), AMR_PULSE(2,5,1, 7,0),
+    AMR_PULSE(2,4,1, 7,0), AMR_PULSE(2,5,1, 5,0), AMR_PULSE(2,4,2, 9,1),
+    AMR_PULSE(2,5,1, 6,0), AMR_PULSE(2,6,2, 5,0), AMR_PULSE(2,5,1, 4,0),
+    AMR_PULSE(2,6,1, 3,0), AMR_PULSE(2,4,1, 4,0), AMR_PULSE(2,6,1, 4,0),
+    AMR_PULSE(2,4,1, 3,0), AMR_PULSE(2,5,1, 3,0), AMR_PULSE(3,4,2, 8,0),
+    AMR_PULSE(3,5,2, 6,1), AMR_PULSE(3,5,1, 7,0), AMR_PULSE(3,4,1, 7,0),
+    AMR_PULSE(3,5,1, 5,0), AMR_PULSE(3,4,2, 9,1), AMR_PULSE(3,5,1, 6,0),
+    AMR_PULSE(3,6,2, 5,0), AMR_PULSE(3,5,1, 4,0), AMR_PULSE(3,6,1, 3,0),
+    AMR_PULSE(3,4,1, 4,0), AMR_PULSE(3,6,1, 4,0), AMR_PULSE(3,4,1, 3,0),
+    AMR_PULSE(3,5,1, 3,0), AMR_PULSE(0,4,2, 8,0), AMR_PULSE(0,5,2, 6,1),
+    AMR_PULSE(0,5,1, 7,0), AMR_PULSE(0,4,1, 7,0), AMR_PULSE(0,5,1, 5,0),
+    AMR_PULSE(0,4,2, 9,1), AMR_PULSE(0,5,1, 6,0), AMR_PULSE(0,6,2, 5,0),
+    AMR_PULSE(0,5,1, 4,0), AMR_PULSE(0,6,1, 3,0), AMR_PULSE(0,4,1, 4,0),
+    AMR_PULSE(0,6,1, 4,0), AMR_PULSE(0,4,1, 3,0), AMR_PULSE(0,5,1, 3,0),
+    AMR_PULSE(3,6,1, 2,0), AMR_PULSE(3,4,1, 0,0), AMR_PULSE(3,5,1, 0,0),
+    AMR_PULSE(3,6,1, 0,0), AMR_PULSE(3,4,1, 2,0), AMR_PULSE(3,6,1, 1,0),
+    AMR_PULSE(3,4,1, 1,0), AMR_PULSE(3,5,2, 1,0), AMR_PULSE(2,6,1, 2,0),
+    AMR_PULSE(2,4,1, 0,0), AMR_PULSE(2,5,1, 0,0), AMR_PULSE(2,6,1, 0,0),
+    AMR_PULSE(2,4,1, 2,0), AMR_PULSE(2,6,1, 1,0), AMR_PULSE(2,4,1, 1,0),
+    AMR_PULSE(2,5,2, 1,0), AMR_PULSE(1,6,1, 2,0), AMR_PULSE(1,4,1, 0,0),
+    AMR_PULSE(1,5,1, 0,0), AMR_PULSE(1,6,1, 0,0), AMR_PULSE(1,4,1, 2,0),
+    AMR_PULSE(1,6,1, 1,0), AMR_PULSE(1,4,1, 1,0), AMR_PULSE(1,5,2, 1,0),
+    AMR_PULSE(0,6,1, 2,0), AMR_PULSE(0,4,1, 0,0), AMR_PULSE(0,5,1, 0,0),
+    AMR_PULSE(0,6,1, 0,0), AMR_PULSE(0,4,1, 2,0), AMR_PULSE(0,6,1, 1,0),
+    AMR_PULSE(0,4,1, 1,0), AMR_PULSE(0,5,2, 1,0)
 };
 
-static const AMROrder order_MODE_122[244] = {
- AMR_LSF  (  0, 6), AMR_LSF  (  0, 5), AMR_LSF  (  0, 4), AMR_LSF  (  0, 3),
- AMR_LSF  (  0, 2), AMR_LSF  (  0, 1), AMR_LSF  (  0, 0), AMR_LSF  (  1, 7),
- AMR_LSF  (  1, 6), AMR_LSF  (  1, 5), AMR_LSF  (  1, 4), AMR_LSF  (  1, 3),
- AMR_LSF  (  1, 2), AMR_LSF  (  1, 1), AMR_LSF  (  1, 0), AMR_LSF  (  2, 0),
- AMR_LSF  (  2, 8), AMR_LSF  (  2, 7), AMR_LSF  (  2, 6), AMR_LSF  (  2, 5),
- AMR_LSF  (  2, 4), AMR_LSF  (  2, 3), AMR_LSF  (  2, 2), AMR_LSF  (  2, 1),
- AMR_LSF  (  3, 7), AMR_LSF  (  3, 6), AMR_LSF  (  3, 5), AMR_LSF  (  3, 4),
- AMR_LSF  (  3, 3), AMR_PLAG (0,   8), AMR_PLAG (2,   8), AMR_PLAG (0,   7),
- AMR_PLAG (2,   7), AMR_PLAG (0,   6), AMR_PLAG (2,   6), AMR_PLAG (0,   5),
- AMR_PLAG (2,   5), AMR_PLAG (0,   4), AMR_PLAG (2,   4), AMR_PLAG (0,   3),
- AMR_PLAG (2,   3), AMR_PLAG (0,   2), AMR_PLAG (2,   2), AMR_PLAG (0,   1),
- AMR_PLAG (2,   1), AMR_PLAG (0,   0), AMR_PLAG (2,   0), AMR_PGAIN(0,   3),
- AMR_PGAIN(1,   3), AMR_PGAIN(2,   3), AMR_PGAIN(3,   3), AMR_PGAIN(0,   2),
- AMR_PGAIN(1,   2), AMR_PGAIN(2,   2), AMR_PGAIN(3,   2), AMR_PGAIN(0,   1),
- AMR_PGAIN(1,   1), AMR_PGAIN(2,   1), AMR_PGAIN(3,   1), AMR_FGAIN(0,   4),
- AMR_FGAIN(1,   4), AMR_FGAIN(2,   4), AMR_FGAIN(3,   4), AMR_FGAIN(0,   3),
- AMR_FGAIN(1,   3), AMR_FGAIN(2,   3), AMR_FGAIN(3,   3), AMR_FGAIN(0,   2),
- AMR_FGAIN(1,   2), AMR_FGAIN(2,   2), AMR_FGAIN(3,   2), AMR_PLAG (1,   5),
- AMR_PLAG (3,   5), AMR_PLAG (1,   4), AMR_PLAG (3,   4), AMR_PLAG (1,   3),
- AMR_PLAG (3,   3), AMR_PLAG (1,   2), AMR_PLAG (3,   2), AMR_PLAG (1,   1),
- AMR_PLAG (3,   1), AMR_LSF  (  3, 2), AMR_LSF  (  3, 1), AMR_LSF  (  3, 0),
- AMR_LSF  (  4, 5), AMR_LSF  (  4, 4), AMR_LSF  (  4, 3), AMR_LSF  (  4, 2),
- AMR_PGAIN(0,   0), AMR_PGAIN(1,   0), AMR_PGAIN(2,   0), AMR_PGAIN(3,   0),
- AMR_FGAIN(0,   1), AMR_FGAIN(1,   1), AMR_FGAIN(2,   1), AMR_FGAIN(3,   1),
- AMR_PULSE(0,0, 3), AMR_PULSE(1,0, 3), AMR_PULSE(2,0, 3), AMR_PULSE(3,0, 3),
- AMR_PULSE(0,1, 3), AMR_PULSE(1,1, 3), AMR_PULSE(2,1, 3), AMR_PULSE(3,1, 3),
- AMR_FGAIN(0,   0), AMR_FGAIN(1,   0), AMR_FGAIN(2,   0), AMR_FGAIN(3,   0),
- AMR_PULSE(0,2, 3), AMR_PULSE(1,2, 3), AMR_PULSE(2,2, 3), AMR_PULSE(3,2, 3),
- AMR_PULSE(0,3, 3), AMR_PULSE(1,3, 3), AMR_PULSE(2,3, 3), AMR_PULSE(3,3, 3),
- AMR_PULSE(0,4, 3), AMR_PULSE(1,4, 3), AMR_PULSE(2,4, 3), AMR_PULSE(3,4, 3),
- AMR_LSF  (  4, 1), AMR_LSF  (  4, 0), AMR_PULSE(0,0, 0), AMR_PULSE(0,0, 1),
- AMR_PULSE(0,0, 2), AMR_PULSE(0,1, 0), AMR_PULSE(0,1, 1), AMR_PULSE(0,1, 2),
- AMR_PULSE(0,2, 0), AMR_PULSE(0,2, 1), AMR_PULSE(0,2, 2), AMR_PULSE(0,3, 0),
- AMR_PULSE(0,3, 1), AMR_PULSE(0,3, 2), AMR_PULSE(0,4, 0), AMR_PULSE(0,4, 1),
- AMR_PULSE(0,4, 2), AMR_PULSE(1,0, 0), AMR_PULSE(1,0, 1), AMR_PULSE(1,0, 2),
- AMR_PULSE(1,1, 0), AMR_PULSE(1,1, 1), AMR_PULSE(1,1, 2), AMR_PULSE(1,2, 0),
- AMR_PULSE(1,2, 1), AMR_PULSE(1,2, 2), AMR_PULSE(1,3, 0), AMR_PULSE(1,3, 1),
- AMR_PULSE(1,3, 2), AMR_PULSE(1,4, 0), AMR_PULSE(1,4, 1), AMR_PULSE(1,4, 2),
- AMR_PULSE(2,0, 0), AMR_PULSE(2,0, 1), AMR_PULSE(2,0, 2), AMR_PULSE(2,1, 0),
- AMR_PULSE(2,1, 1), AMR_PULSE(2,1, 2), AMR_PULSE(2,2, 0), AMR_PULSE(2,2, 1),
- AMR_PULSE(2,2, 2), AMR_PULSE(2,3, 0), AMR_PULSE(2,3, 1), AMR_PULSE(2,3, 2),
- AMR_PULSE(2,4, 0), AMR_PULSE(2,4, 1), AMR_PULSE(2,4, 2), AMR_PULSE(3,0, 0),
- AMR_PULSE(3,0, 1), AMR_PULSE(3,0, 2), AMR_PULSE(3,1, 0), AMR_PULSE(3,1, 1),
- AMR_PULSE(3,1, 2), AMR_PULSE(3,2, 0), AMR_PULSE(3,2, 1), AMR_PULSE(3,2, 2),
- AMR_PULSE(3,3, 0), AMR_PULSE(3,3, 1), AMR_PULSE(3,3, 2), AMR_PULSE(3,4, 0),
- AMR_PULSE(3,4, 1), AMR_PULSE(3,4, 2), AMR_PULSE(0,5, 0), AMR_PULSE(0,5, 1),
- AMR_PULSE(0,5, 2), AMR_PULSE(0,6, 0), AMR_PULSE(0,6, 1), AMR_PULSE(0,6, 2),
- AMR_PULSE(0,7, 0), AMR_PULSE(0,7, 1), AMR_PULSE(0,7, 2), AMR_PULSE(0,8, 0),
- AMR_PULSE(0,8, 1), AMR_PULSE(0,8, 2), AMR_PULSE(0,9, 0), AMR_PULSE(0,9, 1),
- AMR_PULSE(0,9, 2), AMR_PULSE(1,5, 0), AMR_PULSE(1,5, 1), AMR_PULSE(1,5, 2),
- AMR_PULSE(1,6, 0), AMR_PULSE(1,6, 1), AMR_PULSE(1,6, 2), AMR_PULSE(1,7, 0),
- AMR_PULSE(1,7, 1), AMR_PULSE(1,7, 2), AMR_PULSE(1,8, 0), AMR_PULSE(1,8, 1),
- AMR_PULSE(1,8, 2), AMR_PULSE(1,9, 0), AMR_PULSE(1,9, 1), AMR_PULSE(1,9, 2),
- AMR_PULSE(2,5, 0), AMR_PULSE(2,5, 1), AMR_PULSE(2,5, 2), AMR_PULSE(2,6, 0),
- AMR_PULSE(2,6, 1), AMR_PULSE(2,6, 2), AMR_PULSE(2,7, 0), AMR_PULSE(2,7, 1),
- AMR_PULSE(2,7, 2), AMR_PULSE(2,8, 0), AMR_PULSE(2,8, 1), AMR_PULSE(2,8, 2),
- AMR_PULSE(2,9, 0), AMR_PULSE(2,9, 1), AMR_PULSE(2,9, 2), AMR_PULSE(3,5, 0),
- AMR_PULSE(3,5, 1), AMR_PULSE(3,5, 2), AMR_PULSE(3,6, 0), AMR_PULSE(3,6, 1),
- AMR_PULSE(3,6, 2), AMR_PULSE(3,7, 0), AMR_PULSE(3,7, 1), AMR_PULSE(3,7, 2),
- AMR_PULSE(3,8, 0), AMR_PULSE(3,8, 1), AMR_PULSE(3,8, 2), AMR_PULSE(3,9, 0),
- AMR_PULSE(3,9, 1), AMR_PULSE(3,9, 2), AMR_PLAG (1,   0), AMR_PLAG (3,   0)
+static AMROrder order_MODE_122[] = {
+    AMR_LSF  (  0,7, 0,0), AMR_LSF  (  1,8, 0,0), AMR_LSF  (  2,1, 0,0),
+    AMR_LSF  (  2,8, 1,0), AMR_LSF  (  3,5, 3,0), AMR_PLAG (0  ,1, 8,0),
+    AMR_PLAG (2  ,1, 8,0), AMR_PLAG (0  ,1, 7,0), AMR_PLAG (2  ,1, 7,0),
+    AMR_PLAG (0  ,1, 6,0), AMR_PLAG (2  ,1, 6,0), AMR_PLAG (0  ,1, 5,0),
+    AMR_PLAG (2  ,1, 5,0), AMR_PLAG (0  ,1, 4,0), AMR_PLAG (2  ,1, 4,0),
+    AMR_PLAG (0  ,1, 3,0), AMR_PLAG (2  ,1, 3,0), AMR_PLAG (0  ,1, 2,0),
+    AMR_PLAG (2  ,1, 2,0), AMR_PLAG (0  ,1, 1,0), AMR_PLAG (2  ,1, 1,0),
+    AMR_PLAG (0  ,1, 0,0), AMR_PLAG (2  ,1, 0,0), AMR_PGAIN(0  ,1, 3,0),
+    AMR_PGAIN(1  ,1, 3,0), AMR_PGAIN(2  ,1, 3,0), AMR_PGAIN(3  ,1, 3,0),
+    AMR_PGAIN(0  ,1, 2,0), AMR_PGAIN(1  ,1, 2,0), AMR_PGAIN(2  ,1, 2,0),
+    AMR_PGAIN(3  ,1, 2,0), AMR_PGAIN(0  ,1, 1,0), AMR_PGAIN(1  ,1, 1,0),
+    AMR_PGAIN(2  ,1, 1,0), AMR_PGAIN(3  ,1, 1,0), AMR_FGAIN(0  ,1, 4,0),
+    AMR_FGAIN(1  ,1, 4,0), AMR_FGAIN(2  ,1, 4,0), AMR_FGAIN(3  ,1, 4,0),
+    AMR_FGAIN(0  ,1, 3,0), AMR_FGAIN(1  ,1, 3,0), AMR_FGAIN(2  ,1, 3,0),
+    AMR_FGAIN(3  ,1, 3,0), AMR_FGAIN(0  ,1, 2,0), AMR_FGAIN(1  ,1, 2,0),
+    AMR_FGAIN(2  ,1, 2,0), AMR_FGAIN(3  ,1, 2,0), AMR_PLAG (1  ,1, 5,0),
+    AMR_PLAG (3  ,1, 5,0), AMR_PLAG (1  ,1, 4,0), AMR_PLAG (3  ,1, 4,0),
+    AMR_PLAG (1  ,1, 3,0), AMR_PLAG (3  ,1, 3,0), AMR_PLAG (1  ,1, 2,0),
+    AMR_PLAG (3  ,1, 2,0), AMR_PLAG (1  ,1, 1,0), AMR_PLAG (3  ,1, 1,0),
+    AMR_LSF  (  3,3, 0,0), AMR_LSF  (  4,4, 2,0), AMR_PGAIN(0  ,1, 0,0),
+    AMR_PGAIN(1  ,1, 0,0), AMR_PGAIN(2  ,1, 0,0), AMR_PGAIN(3  ,1, 0,0),
+    AMR_FGAIN(0  ,1, 1,0), AMR_FGAIN(1  ,1, 1,0), AMR_FGAIN(2  ,1, 1,0),
+    AMR_FGAIN(3  ,1, 1,0), AMR_PULSE(0,0,1, 3,0), AMR_PULSE(1,0,1, 3,0),
+    AMR_PULSE(2,0,1, 3,0), AMR_PULSE(3,0,1, 3,0), AMR_PULSE(0,1,1, 3,0),
+    AMR_PULSE(1,1,1, 3,0), AMR_PULSE(2,1,1, 3,0), AMR_PULSE(3,1,1, 3,0),
+    AMR_FGAIN(0  ,1, 0,0), AMR_FGAIN(1  ,1, 0,0), AMR_FGAIN(2  ,1, 0,0),
+    AMR_FGAIN(3  ,1, 0,0), AMR_PULSE(0,2,1, 3,0), AMR_PULSE(1,2,1, 3,0),
+    AMR_PULSE(2,2,1, 3,0), AMR_PULSE(3,2,1, 3,0), AMR_PULSE(0,3,1, 3,0),
+    AMR_PULSE(1,3,1, 3,0), AMR_PULSE(2,3,1, 3,0), AMR_PULSE(3,3,1, 3,0),
+    AMR_PULSE(0,4,1, 3,0), AMR_PULSE(1,4,1, 3,0), AMR_PULSE(2,4,1, 3,0),
+    AMR_PULSE(3,4,1, 3,0), AMR_LSF  (  4,2, 0,0), AMR_PULSE(0,0,3,13,1),
+    AMR_PULSE(0,1,3,13,1), AMR_PULSE(0,2,3,13,1), AMR_PULSE(0,3,3,13,1),
+    AMR_PULSE(0,4,3,13,1), AMR_PULSE(1,0,3,13,1), AMR_PULSE(1,1,3,13,1),
+    AMR_PULSE(1,2,3,13,1), AMR_PULSE(1,3,3,13,1), AMR_PULSE(1,4,3,13,1),
+    AMR_PULSE(2,0,3,13,1), AMR_PULSE(2,1,3,13,1), AMR_PULSE(2,2,3,13,1),
+    AMR_PULSE(2,3,3,13,1), AMR_PULSE(2,4,3,13,1), AMR_PULSE(3,0,3,13,1),
+    AMR_PULSE(3,1,3,13,1), AMR_PULSE(3,2,3,13,1), AMR_PULSE(3,3,3,13,1),
+    AMR_PULSE(3,4,3,13,1), AMR_PULSE(0,5,3,13,1), AMR_PULSE(0,6,3,13,1),
+    AMR_PULSE(0,7,3,13,1), AMR_PULSE(0,8,3,13,1), AMR_PULSE(0,9,3,13,1),
+    AMR_PULSE(1,5,3,13,1), AMR_PULSE(1,6,3,13,1), AMR_PULSE(1,7,3,13,1),
+    AMR_PULSE(1,8,3,13,1), AMR_PULSE(1,9,3,13,1), AMR_PULSE(2,5,3,13,1),
+    AMR_PULSE(2,6,3,13,1), AMR_PULSE(2,7,3,13,1), AMR_PULSE(2,8,3,13,1),
+    AMR_PULSE(2,9,3,13,1), AMR_PULSE(3,5,3,13,1), AMR_PULSE(3,6,3,13,1),
+    AMR_PULSE(3,7,3,13,1), AMR_PULSE(3,8,3,13,1), AMR_PULSE(3,9,3,13,1),
+    AMR_PLAG (1  ,1, 0,0), AMR_PLAG (3  ,1, 0,0)
 };
 
-static const AMROrder order_MODE_DTX[35] = {
- AMR_SVECTOR(   2), AMR_SVECTOR(   1), AMR_SVECTOR(   0),
- AMR_LSF  (  0, 7), AMR_LSF  (  0, 6), AMR_LSF  (  0, 5), AMR_LSF  (  0, 4),
- AMR_LSF  (  0, 3), AMR_LSF  (  0, 2), AMR_LSF  (  0, 1), AMR_LSF  (  0, 0),
- AMR_LSF  (  1, 8), AMR_LSF  (  1, 7), AMR_LSF  (  1, 6), AMR_LSF  (  1, 5),
- AMR_LSF  (  1, 4), AMR_LSF  (  1, 3), AMR_LSF  (  1, 2), AMR_LSF  (  1, 1),
- AMR_LSF  (  1, 0), AMR_LSF  (  2, 8), AMR_LSF  (  2, 7), AMR_LSF  (  2, 6),
- AMR_LSF  (  2, 5), AMR_LSF  (  2, 4), AMR_LSF  (  2, 3), AMR_LSF  (  2, 2),
- AMR_LSF  (  2, 1), AMR_LSF  (  2, 0),
- AMR_SENERGY(   5), AMR_SENERGY(   4), AMR_SENERGY(   3),
- AMR_SENERGY(   2), AMR_SENERGY(   1), AMR_SENERGY(   0)
+static AMROrder order_MODE_DTX[] = {
+    AMR_SVECTOR(  3, 0,0), AMR_LSF    (0,8, 0,0), AMR_LSF    (1,9, 0,0),
+    AMR_LSF    (2,9, 0,0), AMR_SENERGY(  6, 0,0)
 };
 
 /**
@@ -481,8 +464,8 @@ static const AMROrder * const amr_unpack
     order_MODE_DTX,
 };
 
-/** number of bits for each mode */
-static const uint8_t mode_bits[N_MODES] = {
+/** number of runs of consecutive bits for each mode */
+static const uint8_t mode_runs[N_MODES] = {
     FF_ARRAY_ELEMS(order_MODE_475),
     FF_ARRAY_ELEMS(order_MODE_515),
     FF_ARRAY_ELEMS(order_MODE_59),
@@ -494,6 +477,8 @@ static const uint8_t mode_bits[N_MODES] 
     FF_ARRAY_ELEMS(order_MODE_DTX)
 };
 
+/** number of bits for each mode */
+static const uint8_t mode_bits[N_MODES] = { 95, 103, 118, 134, 148, 159, 204, 244, 35 };
 
 /**
  * Values for the lsp vector from the 4th subframe of the

Modified: amr/amrnbdec.c
==============================================================================
--- amr/amrnbdec.c	Mon Aug 10 13:12:25 2009	(r5027)
+++ amr/amrnbdec.c	Mon Aug 10 20:42:31 2009	(r5028)
@@ -134,6 +134,14 @@ static av_cold int amrnb_decode_init(AVC
     return 0;
 }
 
+inline uint16_t reverse_bits(uint16_t x)
+{
+    x = (x & 0x00FF) << 8 | (x & 0x00FF << 8) >> 8;
+    x = (x & 0x0F0F) << 4 | (x & 0x0F0F << 4) >> 4;
+    x = (x & 0x3333) << 2 | (x & 0x3333 << 2) >> 2;
+    x = (x & 0x5555) << 1 | (x & 0x5555 << 1) >> 1;
+    return x;
+}
 
 /**
  * Unpack an RFC4867 speech frame into the AMR frame mode and parameters.
@@ -166,8 +174,13 @@ static enum Mode unpack_bitstream(AMRCon
         int i;
 
         memset(&p->frame, 0, sizeof(AMRNBFrame));
-        for (i = 0; i < mode_bits[mode]; i++)
-            data[order[i].index] += get_bits1(&gb) << order[i].bit;
+        for (i = 0; i < mode_runs[mode]; i++) {
+            uint16_t bits = get_bits(&gb, order[i].len);
+            if (order[i].rev) {
+                data[order[i].index] += reverse_bits(bits) >> order[i].shift;
+            } else
+                data[order[i].index] += bits << order[i].shift;
+        }
     }
 
     return mode;


More information about the FFmpeg-soc mailing list