FreeCalypso > hg > gsm-codec-lib
annotate libgsmfr2/pp_good.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 | 96c4ed5529bf |
children |
rev | line source |
---|---|
5
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * In this module we implement preprocessing of received good frames. |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 */ |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include <stdint.h> |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <string.h> |
256
a33edf624061
libgsmfr2: start with API definition and port of libgsmfrp code
Mychaela Falconia <falcon@freecalypso.org>
parents:
242
diff
changeset
|
7 #include "tw_gsmfr.h" |
262
573afa985df6
libgsmfr2: split pp_state.h from pp_internal.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
256
diff
changeset
|
8 #include "pp_state.h" |
256
a33edf624061
libgsmfr2: start with API definition and port of libgsmfrp code
Mychaela Falconia <falcon@freecalypso.org>
parents:
242
diff
changeset
|
9 #include "pp_internal.h" |
5
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
256
a33edf624061
libgsmfr2: start with API definition and port of libgsmfrp code
Mychaela Falconia <falcon@freecalypso.org>
parents:
242
diff
changeset
|
11 void gsmfr_preproc_good_frame(struct gsmfr_preproc_state *st, uint8_t *frame) |
5
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 { |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 int sid; |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 /* always set correct magic */ |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 frame[0] = 0xD0 | frame[0] & 0x0F; |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 /* now classify by SID */ |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 sid = gsmfr_preproc_sid_classify(frame); |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 switch (sid) { |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 case 0: /* good speech frame */ |
242
f081a6850fb5
libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
5
diff
changeset
|
21 st->rx_state = SPEECH; |
530
96c4ed5529bf
libgsmfr2 preproc: implement support for DTXd
Mychaela Falconia <falcon@freecalypso.org>
parents:
262
diff
changeset
|
22 st->dtxd_sid_flag = 0; |
256
a33edf624061
libgsmfr2: start with API definition and port of libgsmfrp code
Mychaela Falconia <falcon@freecalypso.org>
parents:
242
diff
changeset
|
23 memcpy(&st->speech_frame, frame, GSMFR_RTP_FRAME_LEN); |
5
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 return; |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 case 1: /* invalid SID frame */ |
242
f081a6850fb5
libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
5
diff
changeset
|
26 /* state-dependent handling, similar to BFI */ |
f081a6850fb5
libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
5
diff
changeset
|
27 gsmfr_preproc_invalid_sid(st, frame); |
5
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 return; |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 case 2: /* valid SID frame */ |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 st->rx_state = COMFORT_NOISE; |
530
96c4ed5529bf
libgsmfr2 preproc: implement support for DTXd
Mychaela Falconia <falcon@freecalypso.org>
parents:
262
diff
changeset
|
31 st->dtxd_sid_flag = 1; |
242
f081a6850fb5
libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
5
diff
changeset
|
32 gsmfr_preproc_sid2cn(st, frame); |
5
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 return; |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 } |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 } |