FreeCalypso > hg > gsm-net-reveng
diff trau-decode/extr-efr.c @ 9:0565aaa84b17
trau-decode: implement trau-extr program
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 24 May 2024 19:44:14 +0000 |
parents | trau-decode/parse-efr.c@bf5c9fb431b8 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trau-decode/extr-efr.c Fri May 24 19:44:14 2024 +0000 @@ -0,0 +1,53 @@ +/* + * This module implements the EFR decoding part of trau-extr. + */ + +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include <gsm_efr.h> +#include "osmo_bits.h" + +static void +dbits_to_frame(d_bits, frame) + ubit_t *d_bits; + uint8_t *frame; +{ + ubit_t intermed[248], *ip; + uint8_t *op, mask; + unsigned nb; + + intermed[0] = 1; + intermed[1] = 1; + intermed[2] = 0; + intermed[3] = 0; + bcopy(d_bits + 1, intermed + 4, 38); + bcopy(d_bits + 42, intermed + 42, 53); + bcopy(d_bits + 98, intermed + 95, 50); + bcopy(d_bits + 151, intermed + 145, 53); + bcopy(d_bits + 207, intermed + 198, 50); + ip = intermed; + op = frame; + for (nb = 0; nb < EFR_RTP_FRAME_LEN; nb++) { + *op = 0; + for (mask = 0x80; mask; mask >>= 1) { + if (*ip) + *op |= mask; + ip++; + } + op++; + } +} + +void +convert_efr_frame(d_bits, outf) + ubit_t *d_bits; + FILE *outf; +{ + uint8_t frame[EFR_RTP_FRAME_LEN]; + + dbits_to_frame(d_bits, frame); + fwrite(frame, 1, EFR_RTP_FRAME_LEN, outf); +}