FreeCalypso > hg > gsm-codec-lib
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