annotate libgsmfr2/pp_good.c @ 256:a33edf624061

libgsmfr2: start with API definition and port of libgsmfrp code
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 12 Apr 2024 20:49:53 +0000
parents libgsmfrp/good_frame.c@f081a6850fb5
children 573afa985df6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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"
a33edf624061 libgsmfr2: start with API definition and port of libgsmfrp code
Mychaela Falconia <falcon@freecalypso.org>
parents: 242
diff changeset
8 #include "pp_internal.h"
5
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
256
a33edf624061 libgsmfr2: start with API definition and port of libgsmfrp code
Mychaela Falconia <falcon@freecalypso.org>
parents: 242
diff changeset
10 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
11 {
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 int sid;
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 /* always set correct magic */
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 frame[0] = 0xD0 | frame[0] & 0x0F;
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 /* now classify by SID */
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 sid = gsmfr_preproc_sid_classify(frame);
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 switch (sid) {
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 case 0: /* good speech frame */
242
f081a6850fb5 libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
20 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
21 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
22 return;
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 case 1: /* invalid SID frame */
242
f081a6850fb5 libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
24 /* state-dependent handling, similar to BFI */
f081a6850fb5 libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
25 gsmfr_preproc_invalid_sid(st, frame);
5
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 return;
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 case 2: /* valid SID frame */
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 st->rx_state = COMFORT_NOISE;
242
f081a6850fb5 libgsmfrp: new refined implementation
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
29 gsmfr_preproc_sid2cn(st, frame);
5
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 return;
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 }
4812e00bc100 libgsmfrp: implement handling of good frames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 }