FreeCalypso > hg > gsm-codec-lib
diff libgsmfr2/enc_main.c @ 265:a7b593e68ac3
libgsmfr2: integrate encoder main function from libgsm
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 14 Apr 2024 00:24:21 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmfr2/enc_main.c Sun Apr 14 00:24:21 2024 +0000 @@ -0,0 +1,64 @@ +/* + * 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) ); +}