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