FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/prm2bits.c @ 478:936a08cc73ce
doc/AMR-library-API: describe the decoder
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 19 May 2024 21:32:31 +0000 |
parents | ffd48f0a2ab5 |
children |
rev | line source |
---|---|
254
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
400
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
2 * A cleaner reimplementation of AMR Prm2bits() function. |
254
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 */ |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include "typedef.h" |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include "namespace.h" |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include "bitno.h" |
400
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
8 #include "prm2bits.h" |
254
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 |
400
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
10 void Prm2bits(enum Mode mode, const Word16 prm[], Word16 bits[]) |
254
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 { |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 const Word16 *t = bitno[mode]; |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 unsigned nparam = prmno[mode]; |
400
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
14 unsigned n, p, mask; |
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
15 Word16 *b = bits; |
254
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 for (n = 0; n < nparam; n++) { |
400
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
18 p = prm[n]; |
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
19 mask = 1 << (*t++ - 1); |
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
20 for (; mask; mask >>= 1) { |
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
21 if (p & mask) |
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
22 *b++ = 1; |
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
23 else |
ffd48f0a2ab5
libtwamr: implement Prm2bits() like Bits2prm()
Mychaela Falconia <falcon@freecalypso.org>
parents:
254
diff
changeset
|
24 *b++ = 0; |
254
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 } |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 } |
f931e704adc5
libtwamr: bits and parameter packing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 } |