FreeCalypso > hg > gsm-codec-lib
view libgsmhr1/mathhalf.h @ 605:63f774192906
gsmhr_decoder_twts002_in(): set BFI=1 SID=1 for invalid SID
When a received TW-TS-002 RTP payload indicates invalid SID,
which of the 3 possible BFI/SID combinations should we pass to
our internal ETSI-based speech decoder or TFO engine?
Our original code passed BFI=0 SID=1, but upon further reflection,
BFI=1 SID=1 is a better choice. In the corner case where received
invalid SID is fed to a full decoder in homed state, setting BFI=1
allows that decoder to emit zeros on PCM and stay homed, instead of
launching into full decoding.
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 04 Dec 2025 21:01:46 +0000 |
| parents | 597b39aef484 |
| children |
line wrap: on
line source
#ifndef __MATHHALF #define __MATHHALF #include "typedefs.h" /*_________________________________________________________________________ | | | Function Prototypes | |_________________________________________________________________________| */ /* addition */ /************/ Shortword add(Shortword var1, Shortword var2); /* 1 ops */ Shortword sub(Shortword var1, Shortword var2); /* 1 ops */ Longword L_add(Longword L_var1, Longword L_var2); /* 2 ops */ Longword L_sub(Longword L_var1, Longword L_var2); /* 2 ops */ /* multiplication */ /******************/ Shortword mult(Shortword var1, Shortword var2); /* 1 ops */ Longword L_mult(Shortword var1, Shortword var2); /* 1 ops */ Shortword mult_r(Shortword var1, Shortword var2); /* 2 ops */ /* arithmetic shifts */ /*********************/ Shortword shr(Shortword var1, Shortword var2); /* 1 ops */ Shortword shl(Shortword var1, Shortword var2); /* 1 ops */ Longword L_shr(Longword L_var1, Shortword var2); /* 2 ops */ Longword L_shl(Longword L_var1, Shortword var2); /* 2 ops */ Shortword shift_r(Shortword var, Shortword var2); /* 2 ops */ Longword L_shift_r(Longword L_var, Shortword var2); /* 3 ops */ /* absolute value */ /*******************/ Shortword abs_s(Shortword var1); /* 1 ops */ Longword L_abs(Longword var1); /* 3 ops */ /* multiply accumulate */ /************************/ Longword L_mac(Longword L_var3, Shortword var1, Shortword var2); /* 1 op */ Shortword mac_r(Longword L_var3, Shortword var1, Shortword var2); /* 2 op */ Longword L_msu(Longword L_var3, Shortword var1, Shortword var2); /* 1 op */ Shortword msu_r(Longword L_var3, Shortword var1, Shortword var2); /* 2 op */ /* negation */ /*************/ Shortword negate(Shortword var1); /* 1 ops */ Longword L_negate(Longword L_var1); /* 2 ops */ /* Accumulator manipulation */ /****************************/ Longword L_deposit_l(Shortword var1); /* 1 ops */ Longword L_deposit_h(Shortword var1); /* 1 ops */ Shortword extract_l(Longword L_var1); /* 1 ops */ Shortword extract_h(Longword L_var1); /* 1 ops */ /* Round */ /*********/ Shortword round(Longword L_var1); /* 1 ops */ /* Normalization */ /*****************/ Shortword norm_l(Longword L_var1); /* 30 ops */ Shortword norm_s(Shortword var1); /* 15 ops */ /* Division */ /************/ Shortword divide_s(Shortword var1, Shortword var2); /* 18 ops */ #endif
