changeset 402:a8b73b1c5b19

libtwamr: integrate sid_sync.c
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 06 May 2024 19:58:22 +0000
parents 59655481e45b
children 7e0aeab69b10
files libtwamr/Makefile libtwamr/namespace.list libtwamr/sid_sync.c libtwamr/sid_sync.h
diffstat 4 files changed, 177 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libtwamr/Makefile	Mon May 06 19:44:15 2024 +0000
+++ b/libtwamr/Makefile	Mon May 06 19:58:22 2024 +0000
@@ -13,8 +13,8 @@
 	post_pro.o pow2.o pre_big.o pre_proc.o pred_lt.o preemph.o prm2bits.o \
 	prmno.o pstfilt.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
+	qua_gain_tab.o reorder.o residu.o s10_8pf.o set_sign.o sid_sync.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 19:44:15 2024 +0000
+++ b/libtwamr/namespace.list	Mon May 06 19:58:22 2024 +0000
@@ -48,6 +48,7 @@
 ph_disp ph_disp_reset ph_disp_lock ph_disp_release
 pre_big preemphasis preemphasis_reset
 q_gain_code q_gain_pitch
+sid_sync sid_sync_reset sid_sync_set_handover_debt
 
 Bits2prm Prm2bits
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/sid_sync.c	Mon May 06 19:58:22 2024 +0000
@@ -0,0 +1,100 @@
+/*
+*****************************************************************************
+*
+*      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             : sid_sync.c
+*
+*****************************************************************************
+*/
+/*
+*****************************************************************************
+*                         MODULE INCLUDE FILE AND VERSION ID
+*****************************************************************************
+*/
+#include "namespace.h"
+#include "sid_sync.h"
+ 
+/*
+*****************************************************************************
+*                         INCLUDE FILES
+*****************************************************************************
+*/
+#include "tw_amr.h"
+#include "typedef.h"
+#include "basic_op.h"
+#include "no_count.h"
+
+/*
+*****************************************************************************
+*                         LOCAL VARIABLES AND TABLES
+*****************************************************************************
+*/
+
+/*
+*****************************************************************************
+*                         PUBLIC PROGRAM CODE
+*****************************************************************************
+*/
+
+void sid_sync_reset (sid_syncState *st)
+{
+    st->sid_update_rate = 8;
+    st->sid_update_counter = 3;
+    st->sid_handover_debt = 0;
+    st->prev_ft = TX_SPEECH_GOOD;
+}
+
+int sid_sync_set_handover_debt (sid_syncState *st,
+                                Word16 debtFrames) 
+{
+   /* debtFrames >= 0 */ 
+   st->sid_handover_debt = debtFrames;
+   return 0;
+}
+
+void sid_sync (sid_syncState *st, enum Mode mode,
+               enum TXFrameType *tx_frame_type)
+{
+    if (mode == MRDTX)
+    {
+        st->sid_update_counter--;
+        if (st->prev_ft == TX_SPEECH_GOOD) 
+        {
+           *tx_frame_type = TX_SID_FIRST;
+           st->sid_update_counter = 3;
+        } 
+        else 
+        {
+           /* TX_SID_UPDATE or TX_NO_DATA */
+           if ((st->sid_handover_debt > 0) &&
+               (st->sid_update_counter > 2) )
+           {
+              /* ensure extra updates are  properly delayed after 
+                 a possible SID_FIRST */
+              *tx_frame_type = TX_SID_UPDATE;
+              st->sid_handover_debt--;
+           }
+           else 
+           {
+              if (st->sid_update_counter == 0)
+              {
+                 *tx_frame_type = TX_SID_UPDATE;
+                 st->sid_update_counter = st->sid_update_rate;
+              } else {
+                 *tx_frame_type = TX_NO_DATA;
+              }
+           }
+        }
+    }
+    else
+    {
+       st->sid_update_counter = st->sid_update_rate ;
+       *tx_frame_type = TX_SPEECH_GOOD;
+    }
+    st->prev_ft = *tx_frame_type;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/sid_sync.h	Mon May 06 19:58:22 2024 +0000
@@ -0,0 +1,74 @@
+/*
+*****************************************************************************
+*
+*      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             : sid_sync.h
+*      Purpose          : To ensure that the mode only switches to a
+*                         neighbouring mode
+*
+*****************************************************************************
+*/
+#ifndef sid_sync_h
+#define sid_sync_h "$Id $"
+ 
+/*
+*****************************************************************************
+*                         INCLUDE FILES
+*****************************************************************************
+*/
+#include "tw_amr.h"
+#include "typedef.h"
+ 
+/*
+******************************************************************************
+*                         CONSTANTS
+******************************************************************************
+*/
+
+/*
+******************************************************************************
+*                         DEFINITION OF DATA TYPES
+******************************************************************************
+*/
+typedef struct {
+    Word16 sid_update_rate;  /* Send SID Update every sid_update_rate frame */
+    Word16 sid_update_counter; /* Number of frames since last SID          */
+    Word16 sid_handover_debt;  /* Number of extra SID_UPD frames to schedule*/
+    enum TXFrameType prev_ft;
+} sid_syncState;
+ 
+/*
+*****************************************************************************
+*                         LOCAL VARIABLES AND TABLES
+*****************************************************************************
+*/
+ 
+/*
+*****************************************************************************
+*                         DECLARATION OF PROTOTYPES
+*****************************************************************************
+*/
+ 
+void sid_sync_reset (sid_syncState *st);
+/* reset of sid_sync module (i.e. set state memory to zero)
+   returns 0 on success
+ */
+
+int sid_sync_set_handover_debt (sid_syncState *st, /* i/o: sid_sync state  */
+                                Word16 debtFrames);
+/*  update handover debt 
+    debtFrames extra SID_UPD are scheduled .
+    to update remote decoder CNI states, right after an handover.
+    (primarily for use on MS UL side )  
+*/ 
+
+void sid_sync(sid_syncState *st , /* i/o: sid_sync state      */
+              enum Mode mode,
+              enum TXFrameType *tx_frame_type); 
+
+#endif