changeset 61:a18782a7d270

libgsmefr: d_gains.c compiles
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 25 Nov 2022 20:19:30 +0000
parents d273a77d5523
children c87ccddf3fd1
files libgsmefr/Makefile libgsmefr/d_gains.c libgsmefr/dtx.h
diffstat 3 files changed, 82 insertions(+), 131 deletions(-) [+]
line wrap: on
line diff
--- a/libgsmefr/Makefile	Fri Nov 25 19:22:05 2022 +0000
+++ b/libgsmefr/Makefile	Fri Nov 25 20:19:30 2022 +0000
@@ -1,8 +1,8 @@
 CC=	gcc
 CFLAGS=	-O2
 OBJS=	agc.o autocorr.o az_lsp.o basicop2.o c1035pf.o cod_12k2.o convolve.o \
-	d1035pf.o dec_create.o enc_create.o frame2params.o params2frame.o \
-	sid_class.o sid_insert.o tls_flags.o
+	d1035pf.o d_gains.o dec_create.o enc_create.o frame2params.o \
+	params2frame.o sid_class.o sid_insert.o tls_flags.o
 HDRS=	basic_op.h cnst.h codec.h d_homing.h dec_state.h dtx.h e_homing.h \
 	enc_state.h gains_tb.h gsm_efr.h memops.h namespace.h no_count.h \
 	oper_32b.h sig_proc.h typedef.h vad.h
--- a/libgsmefr/d_gains.c	Fri Nov 25 19:22:05 2022 +0000
+++ b/libgsmefr/d_gains.c	Fri Nov 25 20:19:30 2022 +0000
@@ -10,41 +10,22 @@
  * ( in dB/(20*log10(2)) ) with mean removed.
  *************************************************************************/
 
+#include "gsm_efr.h"
 #include "typedef.h"
+#include "namespace.h"
 #include "basic_op.h"
 #include "oper_32b.h"
-#include "count.h"
+#include "no_count.h"
 #include "sig_proc.h"
+#include "memops.h"
+#include "codec.h"
 
 #include "gains_tb.h"
 
 #include "cnst.h"
+#include "dec_state.h"
 #include "dtx.h"
 
-extern Word16 gain_code_old_rx[4 * DTX_HANGOVER];
-
-/* Static variables for bad frame handling */
-
-/* Variables used by d_gain_pitch: */
-Word16 pbuf[5], past_gain_pit, prev_gp;
-
-/* Variables used by d_gain_code: */
-Word16 gbuf[5], past_gain_code, prev_gc;
-
-/* Static variables for CNI (used by d_gain_code) */
-
-Word16 gcode0_CN, gain_code_old_CN, gain_code_new_CN, gain_code_muting_CN;
-
-/* Memories of gain dequantization: */
-
-/* past quantized energies.      */
-/* initialized to -14.0/constant, constant = 20*Log10(2) */
-
-Word16 past_qua_en[4];
-
-/* MA prediction coeff   */
-Word16 pred[4];
-
 /*************************************************************************
  *
  *  FUNCTION:   gmed5
@@ -55,25 +36,21 @@
  *             
  *************************************************************************/
 
-Word16 gmed5 (        /* out      : index of the median value (0...4) */
+static Word16 gmed5 ( /* out      : index of the median value (0...4) */
     Word16 ind[]      /* in       : Past gain values                  */
 )
 {
     Word16 i, j, ix = 0, tmp[5];
     Word16 max, tmp2[5];
 
-    for (i = 0; i < 5; i++)
-    {
-        tmp2[i] = ind[i];                                      move16 (); 
-    }
+    Copy (ind, tmp2, 5);
 
     for (i = 0; i < 5; i++)
     {
         max = -8192;                                           move16 (); 
         for (j = 0; j < 5; j++)
         {
-            test (); 
-            if (sub (tmp2[j], max) >= 0)
+            if (tmp2[j] >= max)
             {
                 max = tmp2[j];                                 move16 (); 
                 ix = j;                                        move16 (); 
@@ -100,6 +77,7 @@
  *************************************************************************/
 
 Word16 d_gain_pitch ( /* out      : quantized pitch gain           */
+    struct EFR_decoder_state *st,
     Word16 index,     /* in       : index of quantization          */
     Word16 bfi,       /* in       : bad frame indicator (good = 0) */
     Word16 state,
@@ -115,63 +93,56 @@
 
     Word16 gain, tmp, i;
 
-    test (); 
     if (bfi == 0)
     {
-        test (); logic16 (); 
         if ((rxdtx_ctrl & RX_SP_FLAG) != 0)
         {
-            gain = shr (qua_gain_pitch[index], 2);             move16 (); 
+            gain = shr (qua_gain_pitch[index], 2);
 
-            test (); 
             if (prev_bf != 0)
             {
-                test (); 
-                if (sub (gain, prev_gp) > 0)
+                if (gain > st->prev_gp)
                 {
-                    gain = prev_gp;
+                    gain = st->prev_gp;
                 }
             }
         }
         else
         {
-            gain = 0;                                          move16 (); 
+            gain = 0;
         }
-        prev_gp = gain;                                        move16 (); 
+        st->prev_gp = gain;
     }
     else
     {
-        test (); logic16 (); 
         if ((rxdtx_ctrl & RX_SP_FLAG) != 0)
         {
-            tmp = gmed5 (pbuf);                                move16 (); 
+            tmp = gmed5 (st->pbuf);
 
-            test (); 
-            if (sub (tmp, past_gain_pit) < 0)
+            if (tmp < st->past_gain_pit)
             {
-                past_gain_pit = tmp;                           move16 (); 
+                st->past_gain_pit = tmp;
             }
-            gain = mult (pdown[state], past_gain_pit);
+            gain = mult (pdown[state], st->past_gain_pit);
         }
         else
         {
-            gain = 0;                                          move16 (); 
+            gain = 0;
         }
     }
 
-    past_gain_pit = gain;                                      move16 (); 
+    st->past_gain_pit = gain;
 
-    test (); 
-    if (sub (past_gain_pit, 4096) > 0)  /* if (past_gain_pit > 1.0) */
+    if (sub (st->past_gain_pit, 4096) > 0)  /* if (past_gain_pit > 1.0) */
     {
-        past_gain_pit = 4096;                                  move16 (); 
+        st->past_gain_pit = 4096;
     }
     for (i = 1; i < 5; i++)
     {
-        pbuf[i - 1] = pbuf[i];                                 move16 (); 
+        st->pbuf[i - 1] = st->pbuf[i];
     }
 
-    pbuf[4] = past_gain_pit;                                   move16 (); 
+    st->pbuf[4] = st->past_gain_pit;
 
     return gain;
 }
@@ -197,6 +168,7 @@
 #define MEAN_ENER  783741L      /* 36/(20*log10(2))       */
 
 void d_gain_code (
+    struct EFR_decoder_state *st,
     Word16 index,      /* input : received quantization index */
     Word16 code[],     /* input : innovation codevector       */
     Word16 lcode,      /* input : codevector length           */
@@ -219,142 +191,130 @@
     Word16 gcode0, exp, frac, av_pred_en;
     Word32 ener, ener_code;
 
-    test (); test (); logic16 (); 
     if (((rxdtx_ctrl & RX_UPD_SID_QUANT_MEM) != 0) && (i_subfr == 0))
     {
-        gcode0_CN = update_gcode0_CN (gain_code_old_rx);       move16 (); 
-        gcode0_CN = shl (gcode0_CN, 4);
+        st->gcode0_CN = update_gcode0_CN (st->gain_code_old_rx);
+        st->gcode0_CN = shl (st->gcode0_CN, 4);
     }
 
     /* Handle cases of comfort noise fixed codebook gain decoding in
        which past valid SID frames are repeated */
 
-    test (); test (); test (); logic16 (); logic16 (); logic16 (); 
     if (((rxdtx_ctrl & RX_NO_TRANSMISSION) != 0)
         || ((rxdtx_ctrl & RX_INVALID_SID_FRAME) != 0)
         || ((rxdtx_ctrl & RX_LOST_SID_FRAME) != 0))
     {
 
-        test (); logic16 (); 
         if ((rxdtx_ctrl & RX_NO_TRANSMISSION) != 0)
         {
             /* DTX active: no transmission. Interpolate gain values
             in memory */
-            test (); 
             if (i_subfr == 0)
             {
-                *gain_code = interpolate_CN_param (gain_code_old_CN,
-                                            gain_code_new_CN, rx_dtx_state);
-                                                               move16 (); 
+                *gain_code = interpolate_CN_param (st->gain_code_old_CN,
+                                            st->gain_code_new_CN, rx_dtx_state);
             }
             else
             {
-                *gain_code = prev_gc;                          move16 (); 
+                *gain_code = st->prev_gc;
             }
         }
         else
         {                       /* Invalid or lost SID frame:
             use gain values from last good SID frame */
-            gain_code_old_CN = gain_code_new_CN;               move16 (); 
-            *gain_code = gain_code_new_CN;                     move16 (); 
+            st->gain_code_old_CN = st->gain_code_new_CN;
+            *gain_code = st->gain_code_new_CN;
 
             /* reset table of past quantized energies */
             for (i = 0; i < 4; i++)
             {
-                past_qua_en[i] = -2381;                        move16 (); 
+                st->past_qua_en[i] = -2381;
             }
         }
 
-        test (); logic16 (); 
         if ((rxdtx_ctrl & RX_DTX_MUTING) != 0)
         {
             /* attenuate the gain value by 0.75 dB in each subframe */
             /* (total of 3 dB per frame) */
-            gain_code_muting_CN = mult (gain_code_muting_CN, 30057);
-            *gain_code = gain_code_muting_CN;                  move16 (); 
+            st->gain_code_muting_CN = mult (st->gain_code_muting_CN, 30057);
+            *gain_code = st->gain_code_muting_CN;
         }
         else
         {
             /* Prepare for DTX muting by storing last good gain value */
-            gain_code_muting_CN = gain_code_new_CN;            move16 (); 
+            st->gain_code_muting_CN = st->gain_code_new_CN;
         }
 
-        past_gain_code = *gain_code;                           move16 (); 
+        st->past_gain_code = *gain_code;
 
         for (i = 1; i < 5; i++)
         {
-            gbuf[i - 1] = gbuf[i];                             move16 (); 
+            st->gbuf[i - 1] = st->gbuf[i];
         }
 
-        gbuf[4] = past_gain_code;                              move16 (); 
-        prev_gc = past_gain_code;                              move16 (); 
+        st->gbuf[4] = st->past_gain_code;
+        st->prev_gc = st->past_gain_code;
 
         return;
     }
 
     /*----------------- Test erasure ---------------*/
 
-    test (); 
     if (bfi != 0)
     {
-        tmp = gmed5 (gbuf);                                    move16 (); 
-        test (); 
-        if (sub (tmp, past_gain_code) < 0)
+        tmp = gmed5 (st->gbuf);
+        if (sub (tmp, st->past_gain_code) < 0)
         {
-            past_gain_code = tmp;                              move16 (); 
+            st->past_gain_code = tmp;
         }
-        past_gain_code = mult (past_gain_code, cdown[state]);
-        *gain_code = past_gain_code;                           move16 (); 
+        st->past_gain_code = mult (st->past_gain_code, cdown[state]);
+        *gain_code = st->past_gain_code;
 
-        av_pred_en = 0;                                        move16 (); 
+        av_pred_en = 0;
         for (i = 0; i < 4; i++)
         {
-            av_pred_en = add (av_pred_en, past_qua_en[i]);
+            av_pred_en = add (av_pred_en, st->past_qua_en[i]);
         }
 
         /* av_pred_en = 0.25*av_pred_en - 4/(20Log10(2)) */
         av_pred_en = mult (av_pred_en, 8192);   /*  *= 0.25  */
 
         /* if (av_pred_en < -14/(20Log10(2))) av_pred_en = .. */
-        test (); 
         if (sub (av_pred_en, -2381) < 0)
         {
-            av_pred_en = -2381;                                move16 (); 
+            av_pred_en = -2381;
         }
         for (i = 3; i > 0; i--)
         {
-            past_qua_en[i] = past_qua_en[i - 1];               move16 (); 
+            st->past_qua_en[i] = st->past_qua_en[i - 1];
         }
-        past_qua_en[0] = av_pred_en;                           move16 (); 
+        st->past_qua_en[0] = av_pred_en;
         for (i = 1; i < 5; i++)
         {
-            gbuf[i - 1] = gbuf[i];                             move16 (); 
+            st->gbuf[i - 1] = st->gbuf[i];
         }
-        gbuf[4] = past_gain_code;                              move16 (); 
+        st->gbuf[4] = st->past_gain_code;
 
         /* Use the most recent comfort noise fixed codebook gain value
            for updating the fixed codebook gain history */
-        test ();
-        if (gain_code_new_CN == 0)
+        if (st->gain_code_new_CN == 0)
         {
-            tmp = prev_gc;                                     move16 ();
+            tmp = st->prev_gc;
         }
         else
         {
-            tmp = gain_code_new_CN;
+            tmp = st->gain_code_new_CN;
         }
 
-        update_gain_code_history_rx (tmp, gain_code_old_rx);
+        update_gain_code_history_rx (st, tmp);
 
-        test ();
         if (sub (i_subfr, (3 * L_SUBFR)) == 0)
         {
-            gain_code_old_CN = *gain_code;                     move16 (); 
+            st->gain_code_old_CN = *gain_code;
         }
         return;
     }
 
-    test (); logic16 (); 
     if ((rxdtx_ctrl & RX_SP_FLAG) != 0)
     {
 
@@ -386,7 +346,7 @@
         ener = MEAN_ENER;                                      move32 (); 
         for (i = 0; i < 4; i++)
         {
-            ener = L_mac (ener, past_qua_en[i], pred[i]);
+            ener = L_mac (ener, st->past_qua_en[i], st->pred[i]);
         }
 
         /*-------------------------------------------------------------------*
@@ -406,13 +366,11 @@
 
         *gain_code = mult (qua_gain_code[index], gcode0);      move16 (); 
 
-        test (); 
         if (prev_bf != 0)
         {
-            test (); 
-            if (sub (*gain_code, prev_gc) > 0)
+            if (sub (*gain_code, st->prev_gc) > 0)
             {
-                *gain_code = prev_gc;     move16 (); 
+                *gain_code = st->prev_gc;
             }
         }
         /*-------------------------------------------------------------------*
@@ -425,27 +383,25 @@
 
         for (i = 3; i > 0; i--)
         {
-            past_qua_en[i] = past_qua_en[i - 1];               move16 (); 
+            st->past_qua_en[i] = st->past_qua_en[i - 1];
         }
         Log2 (L_deposit_l (qua_gain_code[index]), &exp, &frac);
 
-        past_qua_en[0] = shr (frac, 5);                        move16 (); 
-        past_qua_en[0] = add (past_qua_en[0], shl (sub (exp, 11), 10));
-        move16 (); 
+        st->past_qua_en[0] = shr (frac, 5);
+        st->past_qua_en[0] = add (st->past_qua_en[0], shl (sub (exp, 11), 10));
 
-        update_gain_code_history_rx (*gain_code, gain_code_old_rx);
+        update_gain_code_history_rx (st, *gain_code);
 
         if (sub (i_subfr, (3 * L_SUBFR)) == 0)
         {
-            gain_code_old_CN = *gain_code;                     move16 (); 
+            st->gain_code_old_CN = *gain_code;
         }
     }
     else
     {
-        test (); test (); logic16 (); 
         if (((rxdtx_ctrl & RX_FIRST_SID_UPDATE) != 0) && (i_subfr == 0))
         {
-            gain_code_new_CN = mult (gcode0_CN, qua_gain_code[index]);
+            st->gain_code_new_CN = mult (st->gcode0_CN, qua_gain_code[index]);
 
             /*---------------------------------------------------------------*
              *  reset table of past quantized energies                        *
@@ -454,37 +410,34 @@
 
             for (i = 0; i < 4; i++)
             {
-                past_qua_en[i] = -2381;                        move16 (); 
+                st->past_qua_en[i] = -2381;
             }
         }
-        test (); test (); logic16 (); 
         if (((rxdtx_ctrl & RX_CONT_SID_UPDATE) != 0) && (i_subfr == 0))
         {
-            gain_code_old_CN = gain_code_new_CN;               move16 (); 
-            gain_code_new_CN = mult (gcode0_CN, qua_gain_code[index]);
-                                                               move16 (); 
+            st->gain_code_old_CN = st->gain_code_new_CN;
+            st->gain_code_new_CN = mult (st->gcode0_CN, qua_gain_code[index]);
         }
-        test (); 
         if (i_subfr == 0)
         {
-            *gain_code = interpolate_CN_param (gain_code_old_CN,
-                                               gain_code_new_CN,
-                                               rx_dtx_state);  move16 (); 
+            *gain_code = interpolate_CN_param (st->gain_code_old_CN,
+                                               st->gain_code_new_CN,
+                                               rx_dtx_state);
         }
         else
         {
-            *gain_code = prev_gc;                              move16 (); 
+            *gain_code = st->prev_gc;
         }
     }
 
-    past_gain_code = *gain_code;                               move16 (); 
+    st->past_gain_code = *gain_code;
 
     for (i = 1; i < 5; i++)
     {
-        gbuf[i - 1] = gbuf[i];                                 move16 (); 
+        st->gbuf[i - 1] = st->gbuf[i];
     }
-    gbuf[4] = past_gain_code;                                  move16 (); 
-    prev_gc = past_gain_code;                                  move16 (); 
+    st->gbuf[4] = st->past_gain_code;
+    st->prev_gc = st->past_gain_code;
 
     return;
 }
--- a/libgsmefr/dtx.h	Fri Nov 25 19:22:05 2022 +0000
+++ b/libgsmefr/dtx.h	Fri Nov 25 20:19:30 2022 +0000
@@ -88,14 +88,12 @@
 
 void update_gain_code_history_tx (
     struct EFR_encoder_state *st,
-    Word16 new_gain_code,
-    Word16 gain_code_old_tx[4 * DTX_HANGOVER]
+    Word16 new_gain_code
 );
 
 void update_gain_code_history_rx (
     struct EFR_decoder_state *st,
-    Word16 new_gain_code,
-    Word16 gain_code_old_rx[4 * DTX_HANGOVER]
+    Word16 new_gain_code
 );
 
 Word16 compute_CN_excitation_gain (