FreeCalypso > hg > gsm-codec-lib
view efrtest/etsi-enc-common.c @ 467:ad032051166a
doc: AMR-EFR-hybrid-emu new article
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 12 May 2024 23:54:43 +0000 |
parents | 51678b070c7a |
children |
line wrap: on
line source
/* * This C module holds some functions that have been split off from * etsi-enc.c, with the goal of making it easier to build both * standard-EFR and AMR-EFR versions of the ETSI-format EFR encoder. */ #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> #include "../libgsmefr/gsm_efr.h" read_input(inf, pcm, filename_for_errs, big_endian) FILE *inf; int16_t *pcm; char *filename_for_errs; { uint8_t file_bytes[320], *sp; int cc; unsigned n; cc = fread(file_bytes, 2, 160, inf); if (cc == 0) return 0; if (cc != 160) { fprintf(stderr, "error: short read from %s\n", filename_for_errs); exit(1); } sp = file_bytes; for (n = 0; n < 160; n++) { if (big_endian) pcm[n] = (sp[0] << 8) | sp[1]; else pcm[n] = sp[0] | (sp[1] << 8); sp += 2; } return 1; } void frame2bits(frame, bits) uint8_t *frame, *bits; { unsigned nb, byte, mask, bit; for (nb = 0; nb < EFR_RTP_FRAME_LEN; nb++) { byte = *frame++; for (mask = 0x80; mask; mask >>= 1) { if (byte & mask) bit = 1; else bit = 0; *bits++ = bit; } } } void emit_output(outf, bits, nbits, big_endian) FILE *outf; uint8_t *bits; unsigned nbits; { unsigned n; for (n = 0; n < nbits; n++) { if (big_endian) { putc(0, outf); putc(bits[n], outf); } else { putc(bits[n], outf); putc(0, outf); } } }