FreeCalypso > hg > gsm-codec-lib
annotate libgsmfr2/tfo_dtxd.c @ 556:18aca50d68df default tip
doc/Calypso-TCH-downlink: update for FR1 BFI-with-data
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 11 Oct 2024 01:54:00 +0000 |
parents | 5a3535470c95 |
children |
rev | line source |
---|---|
532
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * The function implemented in this module is a post-processor to be invoked |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * after Rx DTX preproc functions if the Rx DTX handler block is used as a |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * TFO transform with DTXd enabled. It selectively transforms certain |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * preproc output frames (CN and silence frames specifically) into SID, |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * thereby allowing the network operator to reap the benefits of DTX on |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * the radio downlink leg. |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 */ |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdint.h> |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include "tw_gsmfr.h" |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include "pp_state.h" |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 int gsmfr_tfo_xfrm_dtxd(struct gsmfr_preproc_state *st, uint8_t *frame) |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 { |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 uint8_t *p, sub; |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 if (!st->dtxd_sid_flag) |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 return 1; /* SP=1: output is a speech frame */ |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 /* turn the output frame into SID */ |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 p = frame + 5; /* skip magic+LARc */ |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 for (sub = 0; sub < 4; sub++) { |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 *p++ = 0; |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 *p++ &= 0x1F; /* upper 5 bits of Xmaxc field */ |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 *p++ &= 0x80; /* and the lsb spilling into the next byte */ |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 *p++ = 0; |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 *p++ = 0; |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 *p++ = 0; |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 *p++ = 0; |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 } |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 return 0; /* SP=0: output is SID */ |
5a3535470c95
libgsmfr2 TFO: implement DTXd function
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 } |