FreeCalypso > hg > gsm-codec-lib
changeset 339:a723d9f9f697
libtwamr: integrate d_gain_c.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 18 Apr 2024 23:33:00 +0000 |
parents | 5db2c920fc23 |
children | e18452a4fbac |
files | libtwamr/Makefile libtwamr/d_gain_c.c libtwamr/d_gain_c.h libtwamr/namespace.h |
diffstat | 4 files changed, 167 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/libtwamr/Makefile Thu Apr 18 23:28:29 2024 +0000 +++ b/libtwamr/Makefile Thu Apr 18 23:33:00 2024 +0000 @@ -3,9 +3,9 @@ OBJS= a_refl.o agc.o autocorr.o az_lsp.o b_cn_cod.o basicop2.o bgnscd.o \ bitno.o bits2prm.o c1035pf.o c2_11pf.o c2_9pf.o c3_14pf.o c4_17pf.o \ c8_31pf.o c_g_aver.o calc_cor.o calc_en.o cbsearch.o convolve.o cor_h.o\ - d1035pf.o d2_11pf.o d2_9pf.o d3_14pf.o d4_17pf.o d8_31pf.o gains_tab.o \ - gc_pred.o gmed_n.o graytab.o inv_sqrt.o log2.o oper_32b.o pow2.o \ - prmno.o s10_8pf.o set_sign.o sqrt_l.o tls_flags.o window.o + d1035pf.o d2_11pf.o d2_9pf.o d3_14pf.o d4_17pf.o d8_31pf.o d_gain_c.o \ + gains_tab.o gc_pred.o gmed_n.o graytab.o inv_sqrt.o log2.o oper_32b.o \ + pow2.o prmno.o s10_8pf.o set_sign.o sqrt_l.o tls_flags.o window.o LIB= libtwamr.a INSTALL_PREFIX= /usr/local
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/d_gain_c.c Thu Apr 18 23:33:00 2024 +0000 @@ -0,0 +1,109 @@ +/* +******************************************************************************** +* +* 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 : d_gain_c.c +* +******************************************************************************** +*/ + + +/* +******************************************************************************** +* MODULE INCLUDE FILE AND VERSION ID +******************************************************************************** +*/ +#include "namespace.h" +#include "d_gain_c.h" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "tw_amr.h" +#include "typedef.h" +#include "basic_op.h" +#include "oper_32b.h" +#include "no_count.h" +#include "cnst.h" +#include "log2.h" +#include "pow2.h" +#include "gc_pred.h" +#include "gains_tab.h" + +/* +******************************************************************************** +* PUBLIC PROGRAM CODE +******************************************************************************** +*/ + +/* +************************************************************************** +* +* Function : d_gain_code +* Purpose : Decode the fixed codebook gain using the received index. +* +************************************************************************** +*/ +void d_gain_code ( + gc_predState *pred_state, /* i/o : MA predictor state */ + enum Mode mode, /* i : AMR mode (MR795 or MR122) */ + Word16 index, /* i : received quantization index */ + Word16 code[], /* i : innovation codevector */ + Word16 *gain_code /* o : decoded innovation gain */ +) +{ + Word16 gcode0, exp, frac; + const Word16 *p; + Word16 qua_ener_MR122, qua_ener; + Word16 exp_inn_en; + Word16 frac_inn_en; + Word32 L_tmp; + + /*-------------- Decode codebook gain ---------------*/ + + /*-------------------------------------------------------------------* + * predict codebook gain * + * ~~~~~~~~~~~~~~~~~~~~~ * + * gc0 = Pow2(int(d)+frac(d)) * + * = 2^exp + 2^frac * + * * + *-------------------------------------------------------------------*/ + + gc_pred(pred_state, mode, code, &exp, &frac, + &exp_inn_en, &frac_inn_en); + + p = &qua_gain_code[add (add (index, index), index)]; + + /* Different scalings between MR122 and the other modes */ + test (); + if (sub(mode, MR122) == 0) + { + gcode0 = extract_l (Pow2 (exp, frac)); /* predicted gain */ + gcode0 = shl (gcode0, 4); + *gain_code = shl (mult (gcode0, *p++), 1); move16 (); + } + else + { + gcode0 = extract_l (Pow2 (14, frac)); + L_tmp = L_mult(*p++, gcode0); + L_tmp = L_shr(L_tmp, sub(9, exp)); + *gain_code = extract_h(L_tmp); /* Q1 */ + } + + /*-------------------------------------------------------------------* + * update table of past quantized energies * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *-------------------------------------------------------------------*/ + qua_ener_MR122 = *p++; move16(); + qua_ener = *p++; move16(); + gc_pred_update(pred_state, qua_ener_MR122, qua_ener); + + return; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/d_gain_c.h Thu Apr 18 23:33:00 2024 +0000 @@ -0,0 +1,54 @@ +/* +******************************************************************************** +* +* 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 : d_gain_c.h +* Purpose : Decode the fixed codebook gain using the received index. +* +******************************************************************************** +*/ +#ifndef d_gain_c_h +#define d_gain_c_h "$Id $" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "tw_amr.h" +#include "typedef.h" +#include "gc_pred.h" + +/* +******************************************************************************** +* DECLARATION OF PROTOTYPES +******************************************************************************** +*/ +/* +************************************************************************** +* +* Function : d_gain_code +* Purpose : Decode the fixed codebook gain using the received index. +* Description : The received index gives the gain correction factor +* gamma. The quantized gain is given by g_q = g0 * gamma +* where g0 is the predicted gain. To find g0, 4th order +* MA prediction is applied to the mean-removed innovation +* energy in dB. +* Returns : void +* +************************************************************************** +*/ +void d_gain_code ( + gc_predState *pred_state, /* i/o : MA predictor state */ + enum Mode mode, /* i : AMR mode */ + Word16 index, /* i : received quantization index */ + Word16 code[], /* i : innovation codevector */ + Word16 *gain_code /* o : decoded innovation gain */ +); + +#endif
--- a/libtwamr/namespace.h Thu Apr 18 23:28:29 2024 +0000 +++ b/libtwamr/namespace.h Thu Apr 18 23:33:00 2024 +0000 @@ -81,6 +81,7 @@ #define cor_h_x2 AMR__cor_h_x2 #define comp_corr AMR__comp_corr #define cbsearch AMR__cbsearch +#define d_gain_code AMR__d_gain_code #define Bits2prm AMR__Bits2prm #define Prm2bits AMR__Prm2bits