FreeCalypso > hg > gsm-codec-lib
view libgsmfr2/enc_main.c @ 274:52c667f17d2c
libgsmfr2: implement gsmfr_0610_encode_frame() wrapper
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 14 Apr 2024 02:57:18 +0000 |
parents | a7b593e68ac3 |
children |
line wrap: on
line source
/* * This C source file has been adapted from TU-Berlin libgsm source * (src/code.c), original notice follows: * * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include <stdint.h> #include <string.h> #include "tw_gsmfr.h" #include "typedef.h" #include "ed_state.h" #include "ed_internal.h" /* * 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER */ void gsmfr_0610_encode_params(struct gsmfr_0610_state *S, const int16_t *s, struct gsmfr_param_frame *outp) { int k; word * dp = S->dp0 + 120; /* [ -120...-1 ] */ word * dpp = dp; /* [ 0...39 ] */ word so[160]; Gsm_Preprocess (S, s, so); Gsm_LPC_Analysis (S, so, outp->LARc); Gsm_Short_Term_Analysis_Filter (S, outp->LARc, so); for (k = 0; k <= 3; k++) { Gsm_Long_Term_Predictor ( S, so+k*40, /* d [0..39] IN */ dp, /* dp [-120..-1] IN */ S->e + 5, /* e [0..39] OUT */ dpp, /* dpp [0..39] OUT */ &outp->Nc[k], &outp->bc[k]); Gsm_RPE_Encoding ( S, S->e + 5,/* e ][0..39][ IN/OUT */ &outp->xmaxc[k], &outp->Mc[k], outp->xMc[k] ); /* * Gsm_Update_of_reconstructed_short_time_residual_signal * ( dpp, S->e + 5, dp ); */ { register int i; register longword ltmp; for (i = 0; i <= 39; i++) dp[ i ] = GSM_ADD( S->e[5 + i], dpp[i] ); } dp += 40; dpp += 40; } (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160), 120 * sizeof(*S->dp0) ); }