FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/ietf_out.c @ 441:ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Thu, 09 May 2024 07:06:31 +0000 | 
| parents | |
| children | 
| rev | line source | 
|---|---|
| 
441
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
2 * The function implemented in this module is responsible for turning | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
3 * struct amr_param_frame (encoder output) into an RFC 4867 payload. | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
4 */ | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
5 | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
6 #include <stdint.h> | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
7 #include "tw_amr.h" | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
8 #include "typedef.h" | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
9 #include "namespace.h" | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
10 #include "cnst.h" | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
11 #include "int_defs.h" | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
12 #include "if1_func.h" | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
13 | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
14 static const uint8_t total_bytes_per_ft[9] = | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
15 {13, 14, 16, 18, 20, 21, 27, 32, 6}; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
16 | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
17 static const uint8_t first_octet_per_ft[9] = | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
18 {0x04, 0x0C, 0x14, 0x1C, 0x24, 0x2C, 0x34, 0x3C, 0x44}; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
19 | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
20 unsigned amr_frame_to_ietf(const struct amr_param_frame *frame, uint8_t *bytes) | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
21 { | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
22 Word16 serial[MAX_SERIAL_SIZE]; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
23 Word16 sti; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
24 enum Mode ft; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
25 | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
26 switch (frame->type) { | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
27 case TX_SPEECH_GOOD: | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
28 ft = frame->mode; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
29 break; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
30 case TX_SID_FIRST: | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
31 ft = MRDTX; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
32 sti = 0; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
33 break; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
34 case TX_SID_UPDATE: | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
35 ft = MRDTX; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
36 sti = 1; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
37 break; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
38 case TX_NO_DATA: | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
39 default: | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
40 bytes[0] = 0x7C; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
41 return 1; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
42 } | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
43 Prm2bits(ft, frame->param, serial); | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
44 bytes[0] = first_octet_per_ft[ft]; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
45 if1_pack_bytes(ft, serial, bytes + 1); | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
46 if (ft == MRDTX) { | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
47 if (sti) | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
48 bytes[5] |= 0x10; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
49 if (frame->mode & 1) | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
50 bytes[5] |= 0x08; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
51 if (frame->mode & 2) | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
52 bytes[5] |= 0x04; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
53 if (frame->mode & 4) | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
54 bytes[5] |= 0x02; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
55 } | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
56 return total_bytes_per_ft[ft]; | 
| 
 
ebe499058c63
libtwamr: implement API functions for RFC 4867 I/O
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
57 } | 
