diff options
author | Jean-Francois Dionne <jf.dionne@nutaq.com> | 2017-04-27 10:11:31 -0400 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-06-09 08:14:18 +0000 |
commit | 43058efa939f36069cdac82f356bdc94ee10d0fc (patch) | |
tree | 51bc6ad08597ef2685d0d69616b97555b4b614e2 | |
parent | 3851e8ea7af8212c6bd86d870277eb1c238b6e78 (diff) |
Fix wrongful GSM FR codec SID frame detection in DTX.
Based on ETSI TS 101 318 section 5.1.2 the 95 bits SID code word
is not detected correctly due to a wrongful offset in the bits
location indexes.
Change-Id: I45d98c6edf267f313883503a65385190ffbc65ca
-rw-r--r-- | src/codec/gsm610.c | 20 | ||||
-rw-r--r-- | tests/codec/codec_test.ok | 17 | ||||
-rw-r--r-- | tests/testsuite.at | 1 |
3 files changed, 27 insertions, 11 deletions
diff --git a/src/codec/gsm610.c b/src/codec/gsm610.c index 47faea21..165484df 100644 --- a/src/codec/gsm610.c +++ b/src/codec/gsm610.c @@ -306,16 +306,16 @@ const uint16_t gsm610_bitorder[260] = { bool osmo_fr_check_sid(uint8_t *rtp_payload, size_t payload_len) { struct bitvec bv; - uint16_t i, z_bits[] = { 59, 60, 62, 63, 65, 66, 68, 69, 71, 72, 74, 75, - 77, 78, 80, 81, 83, 84, 86, 87, 89, 90, 92, 93, - 95, 96, 115, 116, 118, 119, 121, 122, 124, 125, - 127, 128, 130, 131, 133, 134, 136, 137, 139, - 140, 142, 143, 145, 146, 148, 149, 151, 152, - 171, 172, 174, 175, 177, 178, 180, 181, 183, - 184, 186, 187, 189, 190, 192, 193, 195, 196, - 198, 199, 201, 202, 204, 205, 207, 208, 227, - 228, 230, 231, 233, 234, 236, 237, 239, 242, - 245, 248, 251, 254, 257, 260, 263 }; + uint16_t i, z_bits[] = { 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 }; /* signature does not match Full Rate SID */ if ((rtp_payload[0] >> 4) != 0xD) diff --git a/tests/codec/codec_test.ok b/tests/codec/codec_test.ok index 80c4a099..53070233 100644 --- a/tests/codec/codec_test.ok +++ b/tests/codec/codec_test.ok @@ -13,3 +13,20 @@ FR SID ? d8 a9 b5 1d da a8 82 cc ec 52 29 05 a8 c3 e3 0e b0 89 7a ee 42 ca c4 97 HR RTP payload SID test: HR SID ? 03 8e b6 cb ff ff ff ff ff ff ff ff ff ff :: 1 HR SID ? 06 46 76 b1 8e 48 9a 2f 5e 4c 22 2b 62 25 :: 0 +FR RTP payload SID test: +FR SID d7 e0 a3 61 2c 00 00 80 49 00 00 49 00 00 80 00 04 00 00 00 00 12 40 00 10 08 00 00 00 08 2d 04 09 : 1 +FR SID d7 a2 bb 65 e5 00 00 10 00 04 82 00 00 00 00 49 00 02 41 00 00 00 00 20 80 01 00 00 00 42 40 10 d2 : 1 +FR SID d9 60 ab 21 ea 00 00 80 48 20 00 09 00 00 00 00 24 80 00 00 00 10 08 00 10 08 00 00 00 00 01 00 08 : 1 +FR SID d8 21 ab 25 ea 00 00 00 00 04 10 00 00 00 02 41 00 02 48 00 00 00 01 20 00 00 00 00 00 42 00 02 50 : 1 +FR SID d9 61 9a 65 60 00 00 10 00 04 02 00 00 00 02 00 00 00 40 00 00 00 00 00 80 01 00 00 00 02 40 82 52 : 1 +FR SID d9 a5 93 e1 a0 00 00 10 00 00 02 00 00 00 02 09 00 02 40 00 00 00 01 20 80 01 00 00 90 02 40 02 02 : 1 +FR SID d8 20 a3 e5 aa 00 00 80 00 00 00 08 00 00 80 00 04 80 00 00 00 10 08 00 12 08 00 00 00 00 08 00 09 : 1 +FR SID d7 e0 a3 a1 60 00 00 10 00 04 92 00 00 00 00 40 00 00 40 00 00 00 01 00 00 00 00 00 12 00 40 12 00 : 1 +FR SID d8 20 a3 a5 62 00 00 10 00 04 82 00 00 00 02 49 00 00 00 00 00 80 00 24 00 00 00 00 10 02 00 82 02 : 1 +FR SID d4 aa ba 6e bb 00 00 00 00 00 00 40 00 00 10 00 20 90 00 00 00 00 08 00 02 08 00 00 00 08 2c 20 00 : 1 +FR SID d9 64 bb 6d 62 00 00 80 41 00 00 48 00 00 10 00 04 90 00 00 00 00 08 00 00 00 00 00 00 00 2c 24 01 : 1 +FR SID d8 61 b2 a5 62 00 00 00 41 20 00 48 00 00 10 00 04 90 00 00 00 10 08 00 10 40 00 00 00 01 29 24 08 : 1 +FR SID d9 23 ba e5 e2 00 00 80 41 20 00 01 00 00 10 00 04 00 00 00 00 00 48 00 00 00 00 00 00 09 05 20 00 : 1 +FR SID d8 62 a2 61 60 00 00 10 00 00 92 00 00 00 00 40 00 00 08 00 00 00 01 00 00 01 00 00 80 00 40 02 40 : 1 +FR SID d9 e4 c3 6d 12 00 00 80 00 20 00 40 00 00 00 00 00 10 00 00 00 10 48 00 10 48 00 00 00 00 2d 04 00 : 1 +FR SID d9 a4 c3 29 59 00 00 10 00 00 12 00 00 00 00 41 00 00 01 00 00 00 01 00 80 00 00 00 00 42 00 12 02 : 1 diff --git a/tests/testsuite.at b/tests/testsuite.at index aa943e8d..63027d96 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -147,7 +147,6 @@ AT_CLEANUP AT_SETUP([codec]) AT_KEYWORDS([codec]) -AT_CHECK([exit 77]) cat $abs_srcdir/codec/codec_test.ok > expout AT_CHECK([$abs_top_builddir/tests/codec/codec_test], [0], [expout], [ignore]) AT_CLEANUP |