summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Schodet2011-03-28 16:52:19 +0200
committerNicolas Schodet2011-05-25 16:45:05 +0200
commit51257bc462c40c28b93f69c21fd063f11aa3608b (patch)
treec8ae58e8843ee4819f4b423ddcc20b19e77223e6
parente1678ab811e14d7678c47d132f444afd7dd55bc1 (diff)
cesar/mac/pbproc: eat all encoded SACKI bits on exhaustion, refs #362
If decoding ate all SACKI bits, those are no longer available for the next frame in burst.
-rw-r--r--cesar/mac/pbproc/src/sacki_dec.c4
-rw-r--r--cesar/mac/pbproc/test/sacki/src/test_sacki.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/cesar/mac/pbproc/src/sacki_dec.c b/cesar/mac/pbproc/src/sacki_dec.c
index a6c9551eaf..b575520350 100644
--- a/cesar/mac/pbproc/src/sacki_dec.c
+++ b/cesar/mac/pbproc/src/sacki_dec.c
@@ -80,7 +80,11 @@ pbproc_sacki_dec_process (pbproc_sacki_dec_t *ctx, uint pbl,
/* Lookup. */
uint eat = sack_dec_slow[si0 & 0x3f].eat;
if (eat > sil)
+ {
+ /* Eat everything and stop. */
+ sil = 0;
break;
+ }
uint prod = sack_dec_slow[si0 & 0x3f].prod;
uint nok0 = sack_dec_slow[si0 & 0x3f].nok0;
uint nok1 = sack_dec_slow[si0 & 0x3f].nok1;
diff --git a/cesar/mac/pbproc/test/sacki/src/test_sacki.c b/cesar/mac/pbproc/test/sacki/src/test_sacki.c
index b91eb27281..1cdb7db8ce 100644
--- a/cesar/mac/pbproc/test/sacki/src/test_sacki.c
+++ b/cesar/mac/pbproc/test/sacki/src/test_sacki.c
@@ -428,7 +428,7 @@ sacki_dec_test_suite (test_t t)
sacki_dec_test_case (
t, "too long",
"0 0 101 1110 0 111101 0 0 0 0 0 11111 0 11111 0 0 0 0 0 101 0 0 0 0"
- " 11111 11111 110 0 0 100 0 0 0 0 0 0 0 111", 69,
+ " 11111 11111 110 0 0 100 0 0 0 0 0 0 0 111", 72,
"0000 0000 001 0001 0000 101 0000 0000 0000 0000 0000 11 0000 11 0000"
" 0000 0000 0000 0000 001 0000 0000 0000 0000 11 11 100 0000 0000 010"
" 0000 0000 0000 0000 0000 0000 0000 111 11 1111", 144);