summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThierry Carré2013-05-30 18:05:58 +0200
committerThierry Carré2013-06-06 17:39:22 +0200
commitf3d99072b557fde172cc490ecae64f2059b03afe (patch)
treebcd699638f8e7da4f1ec4f9cd1d7f995df82a2ea
parentaefc344dd7c5203df205625eb1f1d37cf9c51c9f (diff)
cesar/ce/rx: fix assert with interval index, refs #4007
Fix assert when interval index is wrong, and current interval version is good.
-rw-r--r--cesar/ce/rx/src/rx.c12
-rw-r--r--cesar/ce/rx/test/src/test_rx.c4
2 files changed, 12 insertions, 4 deletions
diff --git a/cesar/ce/rx/src/rx.c b/cesar/ce/rx/src/rx.c
index 4a3fdf0397..5721b263ea 100644
--- a/cesar/ce/rx/src/rx.c
+++ b/cesar/ce/rx/src/rx.c
@@ -440,21 +440,25 @@ ce_rx_get_nsr (ce_rx_t *ce_rx, cp_tei_t tei, uint int_index,
blk_t *ret = NULL;
/* Check if interval version is valid. */
- if (sta->rx_tonemaps->intervals->version == int_version)
+ if (sta->rx_tonemaps->intervals->version == int_version
+ && int_index < (ce_rx_bl_intervals_fsm_count_ *
+ ce_rx_bl_intervals_repetition_count_))
{
ce_rx_bitloading_t *bt;
if (ce_rx_behavior == CE_RX_BEHAVIOR_INTERVALS_ENABLE)
{
dbg_assert (sta->intervals);
- dbg_assert (int_index < CE_RX_INTERVAL_MAX_FSM_COUNT);
+ uint int_index_fsm = int_index % ce_rx_bl_intervals_fsm_count_;
+
if (sta->rx_tonemaps->default_tmi
- == sta->intervals->tmi[int_index])
+ == sta->intervals->tmi[int_index_fsm])
bt = &sta->ce_rx_bt;
else
- bt = sta->intervals->intervals[int_index];
+ bt = sta->intervals->intervals[int_index_fsm];
}
else
bt = &sta->ce_rx_bt;
+
ret = ce_rx_bl_get_nsr (bt);
/* FIXME: set BER for the moment being. */
if (ret)
diff --git a/cesar/ce/rx/test/src/test_rx.c b/cesar/ce/rx/test/src/test_rx.c
index 4a0187556d..c5239fabab 100644
--- a/cesar/ce/rx/test/src/test_rx.c
+++ b/cesar/ce/rx/test/src/test_rx.c
@@ -400,6 +400,10 @@ test_ce_rx_get_snr (test_t t)
* the NSR of the interval tonemap should be used. */
test_fail_if (ce_rx_get_nsr (ce_rx, tei, 0, 0x42, &ber) !=
(void*) 0xDEADCAFE);
+ /* Same result with ce_rx_bl_intervals_fsm_count_ requested. */
+ test_fail_if (ce_rx_get_nsr (
+ ce_rx, tei, ce_rx_bl_intervals_fsm_count_, 0x42, &ber) !=
+ (void*) 0xDEADCAFE);
/* Clean all the state of the modified interval for this test. */
sta->ce_rx_bt.noise_nrj_blk_count = 0;
sta->intervals = NULL;