FreeCalypso > hg > gsm-codec-lib
diff libgsmefr/enc_main.c @ 112:035424a6ca83
libgsmefr: encoder main function put together
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 29 Nov 2022 07:05:59 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/enc_main.c Tue Nov 29 07:05:59 2022 +0000 @@ -0,0 +1,58 @@ +/* + * This module contains our GSM EFR encoder main function, EFR_encode_params(), + * that stands at the boundary between our public interface and the guts of + * ETSI-based codec. + */ + +#include "gsm_efr.h" +#include "typedef.h" +#include "namespace.h" +#include "basic_op.h" +#include "cnst.h" +#include "codec.h" +#include "sig_proc.h" +#include "memops.h" +#include "enc_state.h" +#include "e_homing.h" +#include "dtx.h" + +void EFR_encode_params(struct EFR_encoder_state *st, const int16_t *pcm_in, + int16_t *params, int *sp_out, int *vad_out) +{ + Word16 *new_speech = st->old_speech + L_TOTAL - L_FRAME; + Word16 syn[L_FRAME]; + Word16 reset_flag; + Word16 i; + + /* Check whether this frame is an encoder homing frame */ + reset_flag = encoder_homing_frame_test (pcm_in); + + for (i = 0; i < L_FRAME; i++) /* Delete the 3 LSBs (13-bit input) */ + { + new_speech[i] = pcm_in[i] & 0xfff8; + } + + Pre_Process (st, new_speech, L_FRAME); /* filter + downscaling */ + + Coder_12k2 (st, params, syn); /* Find speech parameters */ + + if ((st->txdtx_ctrl & TX_SP_FLAG) == 0) + { + /* Write comfort noise parameters into the parameter frame. + Use old parameters in case SID frame is not to be updated */ + CN_encoding (st, params, st->txdtx_ctrl); + } + + /* VAD and SP flag outputs */ + if (vad_out) + *vad_out = ((st->txdtx_ctrl & TX_VAD_FLAG) != 0); + + if (sp_out) + *sp_out = ((st->txdtx_ctrl & TX_SP_FLAG) != 0); + + if (reset_flag != 0) + { + /* Bring the encoder, VAD and DTX to the home state */ + EFR_encoder_reset(st, st->dtx_mode); + } +}