FreeCalypso > hg > gsm-codec-lib
view libgsmfr2/enc_main.c @ 477:4c9222d95647
libtwamr encoder: always emit frame->mode = mode;
In the original implementation of amr_encode_frame(), the 'mode' member
of the output struct was set to 0xFF if the output frame type is TX_NO_DATA.
This design was made to mimic the mode field (16-bit word) being set to
0xFFFF (or -1) in 3GPP test sequence format - but nothing actually depends
on this struct member being set in any way, and amr_frame_to_tseq()
generates the needed 0xFFFF on its own, based on frame->type being equal
to TX_NO_DATA.
It is simpler and more efficient to always set frame->mode to the actual
encoding mode in amr_encode_frame(), and this new behavior has already
been documented in doc/AMR-library-API description in anticipation of
the present change.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 18 May 2024 22:30:42 +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) ); }