FreeCalypso > hg > gsm-codec-lib
annotate libgsmfr2/pp_good.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 | 573afa985df6 |
children | 96c4ed5529bf |
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; |
256
a33edf624061
libgsmfr2: start with API definition and port of libgsmfrp code
Mychaela Falconia <falcon@freecalypso.org>
parents:
242
diff
changeset
|
22 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
|
23 return; |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 case 1: /* invalid SID frame */ |
242
f081a6850fb5
libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
5
diff
changeset
|
25 /* state-dependent handling, similar to BFI */ |
f081a6850fb5
libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
5
diff
changeset
|
26 gsmfr_preproc_invalid_sid(st, frame); |
5
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 return; |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 case 2: /* valid SID frame */ |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 st->rx_state = COMFORT_NOISE; |
242
f081a6850fb5
libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
5
diff
changeset
|
30 gsmfr_preproc_sid2cn(st, frame); |
5
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 return; |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 } |
4812e00bc100
libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 } |