FreeCalypso > hg > gsm-codec-lib
diff libgsmfr2/tfo_dtxd.c @ 532:5a3535470c95
libgsmfr2 TFO: implement DTXd function
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 19 Sep 2024 21:00:18 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmfr2/tfo_dtxd.c Thu Sep 19 21:00:18 2024 +0000 @@ -0,0 +1,32 @@ +/* + * The function implemented in this module is a post-processor to be invoked + * after Rx DTX preproc functions if the Rx DTX handler block is used as a + * TFO transform with DTXd enabled. It selectively transforms certain + * preproc output frames (CN and silence frames specifically) into SID, + * thereby allowing the network operator to reap the benefits of DTX on + * the radio downlink leg. + */ + +#include <stdint.h> +#include "tw_gsmfr.h" +#include "pp_state.h" + +int gsmfr_tfo_xfrm_dtxd(struct gsmfr_preproc_state *st, uint8_t *frame) +{ + uint8_t *p, sub; + + if (!st->dtxd_sid_flag) + return 1; /* SP=1: output is a speech frame */ + /* turn the output frame into SID */ + p = frame + 5; /* skip magic+LARc */ + for (sub = 0; sub < 4; sub++) { + *p++ = 0; + *p++ &= 0x1F; /* upper 5 bits of Xmaxc field */ + *p++ &= 0x80; /* and the lsb spilling into the next byte */ + *p++ = 0; + *p++ = 0; + *p++ = 0; + *p++ = 0; + } + return 0; /* SP=0: output is SID */ +}