FreeCalypso > hg > gsm-codec-lib
view libgsmfrp/sidclass.c @ 128:a5ffec18e4cd
test programs: use printf %d format for codec parameters
Even though all codec params (both FR and EFR) are small unsigned integers,
we use signed int16_t data type for both, for interface reasons: in the
case of FR it's the gsm_signal type of libgsm, and in the case of EFR
it's the Word16 type of ETSI codec guts. Therefore, the correct printf
format is %d, not %u, when the objective is to see what's in the variables
(what the compiler sees) and catch any bugs.
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 11 Dec 2022 04:00:13 +0000 |
| parents | 2b5770c715ee |
| children |
line wrap: on
line source
/* * gsmfr_preproc_sid_classify() utility function classifies * a GSM 06.10 frame in RTP encoding according to the rules * of GSM 06.31 (or 3GPP TS 46.031) section 6.1.1, judging it * as SID=0, SID=1 or SID=2. */ #include "gsm_fr_preproc.h" static const unsigned short sid_field_bits[95] = { 57, 58, 60, 61, 63, 64, 66, 67, 69, 70, 72, 73, 75, 76, 78, 79, 81, 82, 84, 85, 87, 88, 90, 91, 93, 94, 113, 114, 116, 117, 119, 120, 122, 123, 125, 126, 128, 129, 131, 132, 134, 135, 137, 138, 140, 141, 143, 144, 146, 147, 149, 150, 169, 170, 172, 173, 175, 176, 178, 179, 181, 182, 184, 185, 187, 188, 190, 191, 193, 194, 196, 197, 199, 200, 202, 203, 205, 206, 225, 226, 228, 229, 231, 232, 234, 235, 237, 240, 243, 246, 249, 252, 255, 258, 261 }; static inline int get_bit(const gsm_byte *frame, unsigned bitnum) { unsigned bytenum = bitnum >> 3; unsigned bit_in_byte = 7 - (bitnum & 7); unsigned bitmask = 1 << bit_in_byte; if (frame[bytenum] & bitmask) return 1; else return 0; } int gsmfr_preproc_sid_classify(const gsm_byte *frame) { unsigned idx, n; n = 0; for (idx = 0; idx < 95; idx++) { if (get_bit(frame, sid_field_bits[idx])) n++; if (n >= 16) return 0; } if (n < 2) return 2; else return 1; }
