FreeCalypso > hg > gsm-codec-lib
changeset 1:6780b23654bd
libgsmfrp: starting with the silence frame
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 19 Nov 2022 04:04:01 +0000 |
parents | b45bb0f9bdfc |
children | 2b5770c715ee |
files | .hgignore dev/Makefile dev/gsm0611-silence-fr.c libgsmfrp/gsm_fr_preproc.h libgsmfrp/silence_frame.c |
diffstat | 5 files changed, 117 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sat Nov 19 04:04:01 2022 +0000 @@ -0,0 +1,6 @@ +syntax: regexp + +\.[oa]$ + +^dev/gsm0611-silence-fr$ +^dev/gsm0611-silence-fr\.out$
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev/Makefile Sat Nov 19 04:04:01 2022 +0000 @@ -0,0 +1,15 @@ +CC= gcc +CFLAGS= -O2 +PROGS= gsm0611-silence-fr +DATAOUT=gsm0611-silence-fr.out + +all: ${PROGS} ${DATAOUT} + +gsm0611-silence-fr: gsm0611-silence-fr.c + ${CC} ${CFLAGS} -o $@ $@.c -lgsm + +gsm0611-silence-fr.out: gsm0611-silence-fr + ./gsm0611-silence-fr > $@ + +clean: + rm -f *.o *.out ${PROGS}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev/gsm0611-silence-fr.c Sat Nov 19 04:04:01 2022 +0000 @@ -0,0 +1,49 @@ +/* + * This program is meant to be run only once by the developer - it uses + * libgsm function gsm_implode() to transform the idle frame of GSM 06.11 + * (3GPP TS 46.011) from the table format given in the spec into + * libgsm/RTP format. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include <gsm.h> + +static const gsm_signal lar_params[8] = {42, 39, 21, 10, 9, 4, 3, 2}; +static const gsm_signal subframe_params[17] = + {0, 40, 1, 0, 3, 4, 3, 4, 4, 3, 3, 3, 3, 4, 4, 3, 3}; + +main(argc, argv) + char **argv; +{ + gsm state; + gsm_signal params[76]; + gsm_byte frame[33]; + unsigned n; + + /* gsm_implode() requires dummy state */ + state = gsm_create(); + if (!state) { + fprintf(stderr, "gsm_create() failed!\n"); + exit(1); + } + /* gather params */ + bcopy(lar_params, params, sizeof(gsm_signal) * 8); + bcopy(subframe_params, params + 8, sizeof(gsm_signal) * 17); + bcopy(subframe_params, params + 25, sizeof(gsm_signal) * 17); + bcopy(subframe_params, params + 42, sizeof(gsm_signal) * 17); + bcopy(subframe_params, params + 59, sizeof(gsm_signal) * 17); + /* generate frame */ + gsm_implode(state, params, frame); + /* print the frame */ + for (n = 0; n < 33; n++) { + printf("0x%02X,", frame[n]); + if (n == 4 || n == 11 || n == 18 || n == 25 || n == 32) + putchar('\n'); + else + putchar(' '); + } + exit(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmfrp/gsm_fr_preproc.h Sat Nov 19 04:04:01 2022 +0000 @@ -0,0 +1,32 @@ +/* + * This header file is the external public interface to libgsmfrp; + * it should be installed in the same system include directory + * as <gsm.h> from libgsm, on which we depend. + */ + +#ifndef __GSM_FR_PREPROC_H +#define __GSM_FR_PREPROC_H + +#include <gsm.h> + +struct gsmfr_preproc_state; /* opaque to external users */ + +extern struct gsmfr_preproc_state *gsmfr_preproc_create(void); +/* use standard free() call to free it afterward */ + +/* reset state to initial */ +extern void gsmfr_preproc_reset(struct gsmfr_preproc_state *state); + +/* main processing functions */ +extern void gsmfr_preproc_good_frame(struct gsmfr_preproc_state *state, + gsm_byte *frame); +extern void gsmfr_preproc_bfi(struct gsmfr_preproc_state *state, int taf, + gsm_byte *frame_out); + +/* utility function */ +extern int gsmfr_preproc_sid_classify(const gsm_frame *frame); + +/* utility datum */ +extern const gsm_frame gsmfr_preproc_silence_frame; + +#endif /* include guard */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmfrp/silence_frame.c Sat Nov 19 04:04:01 2022 +0000 @@ -0,0 +1,15 @@ +/* + * Table 1 in section 6 of 3GPP TS 46.011 specifies a silence frame + * in the form of GSM 06.10 parameters; here we implement this exact + * silence frame in libgsm encoding, which is also RTP encoding. + */ + +#include "gsm_fr_preproc.h" + +const gsm_frame gsmfr_preproc_silence_frame = { + 0xDA, 0xA7, 0xAA, 0xA5, 0x1A, + 0x00, 0x20, 0x38, 0xE4, 0x6D, 0xB9, 0x1B, + 0x00, 0x20, 0x38, 0xE4, 0x6D, 0xB9, 0x1B, + 0x00, 0x20, 0x38, 0xE4, 0x6D, 0xB9, 0x1B, + 0x00, 0x20, 0x38, 0xE4, 0x6D, 0xB9, 0x1B, +};