FreeCalypso > hg > gsm-codec-lib
changeset 396:38ee82480462
libtwamr: integrate pre_big.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 06 May 2024 18:57:05 +0000 |
parents | 8c7d5eec544c |
children | 9b699f30e6f3 |
files | libtwamr/Makefile libtwamr/namespace.list libtwamr/pre_big.c libtwamr/pre_big.h |
diffstat | 4 files changed, 142 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/libtwamr/Makefile Mon May 06 18:52:57 2024 +0000 +++ b/libtwamr/Makefile Mon May 06 18:57:05 2024 +0000 @@ -10,10 +10,10 @@ gc_pred.o gmed_n.o graytab.o hp_max.o int_lpc.o int_lsf.o inter_36.o \ inv_sqrt.o lag_wind.o levinson.o log2.o lpc.o lsfwt.o lsp.o lsp_avg.o \ lsp_az.o lsp_lsf.o lsp_tab.o mac_32.o oper_32b.o ph_disp.o pitch_fr.o \ - post_pro.o pow2.o prmno.o q_gain_c.o q_gain_p.o q_plsf.o q_plsf3_tab.o \ - q_plsf5_tab.o q_plsf_3.o q_plsf_5.o qgain475.o qgain795.o qua_gain.o \ - qua_gain_tab.o reorder.o residu.o s10_8pf.o set_sign.o sqrt_l.o \ - syn_filt.o tls_flags.o weight_a.o window.o + post_pro.o pow2.o pre_big.o prmno.o q_gain_c.o q_gain_p.o q_plsf.o \ + q_plsf3_tab.o q_plsf5_tab.o q_plsf_3.o q_plsf_5.o qgain475.o qgain795.o\ + qua_gain.o qua_gain_tab.o reorder.o residu.o s10_8pf.o set_sign.o \ + sqrt_l.o syn_filt.o tls_flags.o weight_a.o window.o HDRS= namespace.h LIB= libtwamr.a
--- a/libtwamr/namespace.list Mon May 06 18:52:57 2024 +0000 +++ b/libtwamr/namespace.list Mon May 06 18:57:05 2024 +0000 @@ -45,6 +45,7 @@ gmed_n hp_max lpc lpc_reset lsp lsp_reset lsp_avg lsp_avg_reset ph_disp ph_disp_reset ph_disp_lock ph_disp_release +pre_big q_gain_code q_gain_pitch Bits2prm Prm2bits
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/pre_big.c Mon May 06 18:57:05 2024 +0000 @@ -0,0 +1,92 @@ +/* +******************************************************************************** +* +* GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 +* R99 Version 3.3.0 +* REL-4 Version 4.1.0 +* +******************************************************************************** +* +* File : pre_big.c +* Purpose : Big subframe (2 subframes) preprocessing +* +******************************************************************************** +*/ + +/* +******************************************************************************** +* MODULE INCLUDE FILE AND VERSION ID +******************************************************************************** +*/ +#include "namespace.h" +#include "pre_big.h" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "typedef.h" +#include "basic_op.h" +#include "oper_32b.h" +#include "syn_filt.h" +#include "weight_a.h" +#include "residu.h" +#include "no_count.h" +#include "cnst.h" + +/* +******************************************************************************** +* PUBLIC PROGRAM CODE +******************************************************************************** +*/ +int pre_big( + enum Mode mode, /* i : coder mode */ + const Word16 gamma1[], /* i : spectral exp. factor 1 */ + const Word16 gamma1_12k2[],/* i : spectral exp. factor 1 for EFR */ + const Word16 gamma2[], /* i : spectral exp. factor 2 */ + Word16 A_t[], /* i : A(z) unquantized, for 4 subframes, Q12 */ + Word16 frameOffset, /* i : Start position in speech vector, Q0 */ + Word16 speech[], /* i : speech, Q0 */ + Word16 mem_w[], /* i/o: synthesis filter memory state, Q0 */ + Word16 wsp[] /* o : weighted speech Q0 */ +) +{ + Word16 Ap1[MP1]; /* A(z) with spectral expansion */ + Word16 Ap2[MP1]; /* A(z) with spectral expansion */ + const Word16 *g1; /* Pointer to correct gammma1 vector */ + Word16 aOffset; + Word16 i; + + test (); + if (sub (mode, MR795) <= 0 ) + { + g1 = gamma1; move16 (); + } + else + { + g1 = gamma1_12k2; move16 (); + } + + test (); + if (frameOffset > 0) { + aOffset = 2*MP1; move16 (); + } + else { + aOffset = 0; move16 (); + } + + /* process two subframes (which form the "big" subframe) */ + for (i = 0; i < 2; i++) + { + Weight_Ai(&A_t[aOffset], g1, Ap1); + Weight_Ai(&A_t[aOffset], gamma2, Ap2); + Residu(Ap1, &speech[frameOffset], &wsp[frameOffset], L_SUBFR); + + Syn_filt(Ap2, &wsp[frameOffset], &wsp[frameOffset], L_SUBFR, mem_w, 1); + aOffset = add (aOffset, MP1); + frameOffset = add (frameOffset, L_SUBFR); + } + + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/pre_big.h Mon May 06 18:57:05 2024 +0000 @@ -0,0 +1,45 @@ +/* +******************************************************************************** +* +* GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 +* R99 Version 3.3.0 +* REL-4 Version 4.1.0 +* +******************************************************************************** +* +* File : pre_big.h +* Purpose : Big subframe (2 subframes) preprocessing +* +******************************************************************************** +*/ +#ifndef pre_big_h +#define pre_big_h "$Id $" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "tw_amr.h" +#include "typedef.h" +#include "cnst.h" + +/* +******************************************************************************** +* DECLARATION OF PROTOTYPES +******************************************************************************** +*/ + +int pre_big( + enum Mode mode, /* i : coder mode */ + const Word16 gamma1[], /* i : spectral exp. factor 1 */ + const Word16 gamma1_12k2[],/* i : spectral exp. factor 1 for EFR */ + const Word16 gamma2[], /* i : spectral exp. factor 2 */ + Word16 A_t[], /* i : A(z) unquantized, for 4 subframes, Q12 */ + Word16 frameOffset, /* i : Start position in speech vector, Q0 */ + Word16 speech[], /* i : speech, Q0 */ + Word16 mem_w[], /* i/o: synthesis filter memory state, Q0 */ + Word16 wsp[] /* o : weighted speech Q0 */ +); + +#endif