annotate dev/gsm0611-silence-fr.c @ 183:452c1d5a6268

libgsmefr BFI w/o data: emit zero output after decoder reset In real-life usage, each EFR decoder session will most likely begin with lots of BFI frames before the first real frame arrives. However, because the spec-defined home state of the decoder is speech rather than CN, our regular logic for BFI w/o data would have to feed pseudorandom noise to the decoder (in the "fixed codebook excitation pulses" part), which is silly to do at the beginning of the decoder session right out of reset. Therefore, let's check reset_flag_old, and if we are still in the reset state, simply emit zero output.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 03 Jan 2023 00:12:18 +0000
parents 61cb83bd11ec
children e4ca04586118
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This program is meant to be run only once by the developer - it uses
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * libgsm function gsm_implode() to transform the idle frame of GSM 06.11
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * (3GPP TS 46.011) from the table format given in the spec into
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * libgsm/RTP format.
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 */
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdio.h>
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdlib.h>
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <string.h>
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <strings.h>
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <gsm.h>
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 static const gsm_signal lar_params[8] = {42, 39, 21, 10, 9, 4, 3, 2};
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 static const gsm_signal subframe_params[17] =
25
61cb83bd11ec GSM 06.11 silence frame: it's Nc=40 first, then bc=0
Mychaela Falconia <falcon@freecalypso.org>
parents: 1
diff changeset
16 {40, 0, 1, 0, 3, 4, 3, 4, 4, 3, 3, 3, 3, 4, 4, 3, 3};
1
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 main(argc, argv)
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 char **argv;
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 {
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 gsm state;
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 gsm_signal params[76];
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 gsm_byte frame[33];
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 unsigned n;
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 /* gsm_implode() requires dummy state */
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 state = gsm_create();
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 if (!state) {
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 fprintf(stderr, "gsm_create() failed!\n");
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 exit(1);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 }
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 /* gather params */
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 bcopy(lar_params, params, sizeof(gsm_signal) * 8);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 bcopy(subframe_params, params + 8, sizeof(gsm_signal) * 17);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 bcopy(subframe_params, params + 25, sizeof(gsm_signal) * 17);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 bcopy(subframe_params, params + 42, sizeof(gsm_signal) * 17);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 bcopy(subframe_params, params + 59, sizeof(gsm_signal) * 17);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 /* generate frame */
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 gsm_implode(state, params, frame);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 /* print the frame */
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 for (n = 0; n < 33; n++) {
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 printf("0x%02X,", frame[n]);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 if (n == 4 || n == 11 || n == 18 || n == 25 || n == 32)
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 putchar('\n');
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 else
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 putchar(' ');
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 }
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 exit(0);
6780b23654bd libgsmfrp: starting with the silence frame
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 }