From 7af1a533f0e2eb40949748053531f03aab72eb19 Mon Sep 17 00:00:00 2001 From: Cyril Jourdan Date: Fri, 31 May 2013 09:50:00 +0200 Subject: cesar/ce/rx/bl: send new default tonemap after computation, closes #4026 --- cesar/ce/rx/bitloading/src/intervals.c | 11 ++++++++++ cesar/ce/rx/bitloading/test/src/test_intervals.c | 27 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+) (limited to 'cesar') diff --git a/cesar/ce/rx/bitloading/src/intervals.c b/cesar/ce/rx/bitloading/src/intervals.c index 598748b82b..c85572dfe9 100644 --- a/cesar/ce/rx/bitloading/src/intervals.c +++ b/cesar/ce/rx/bitloading/src/intervals.c @@ -170,6 +170,7 @@ ce_rx_bl_intervals_update_default_tm (ce_rx_t *ce_rx, sta_t *sta) bool use_robo = false; bool use_default = false; uint old_default_tmi = tms->default_tmi; + bool send_new_tm = false; /* If some intervals are currently restarting, we must determine what * impact it will have on future default tonemap. */ @@ -209,6 +210,12 @@ ce_rx_bl_intervals_update_default_tm (ce_rx_t *ce_rx, sta_t *sta) { new_default_tmi = ce_rx_bl_compute_worst_case_tm (ce_rx, tms, tm_list); + /* Send the new tonemap if we have computed one. + * In any other case where we would have changed the default tmi + * to use an already existing tonemap, we can rely on a future + * TMI_UPDATE or CHAN_EST MME to send the information. */ + if (TONEMAP_INDEX_IS_NEGOTIATED (new_default_tmi)) + send_new_tm = true; } tms->default_tmi = new_default_tmi; @@ -222,6 +229,10 @@ ce_rx_bl_intervals_update_default_tm (ce_rx_t *ce_rx, sta_t *sta) { tonemap_disable (tms, old_default_tmi); } + + if (send_new_tm) + ce_rx_cp_send_mme_new_tone_map (ce_rx, sta, tms->default_tmi, + 0, false); } void diff --git a/cesar/ce/rx/bitloading/test/src/test_intervals.c b/cesar/ce/rx/bitloading/test/src/test_intervals.c index 3e59cb2331..66dfe97925 100644 --- a/cesar/ce/rx/bitloading/test/src/test_intervals.c +++ b/cesar/ce/rx/bitloading/test/src/test_intervals.c @@ -26,6 +26,16 @@ /* Global CE/RX behavior stub. */ ce_rx_behavior_t ce_rx_behavior = CE_RX_BEHAVIOR_INTERVALS_ENABLE; +/* In default tonemap update test, we want to know if an MME has been sent. */ +static bool new_tm_mme_sent; + +void +ce_rx_cp_send_mme_new_tone_map (ce_rx_t *ce_rx, sta_t *peer, u8 new_tmi, + u8 old_tmi, bool initial_ce) +{ + new_tm_mme_sent = true; +} + /** * Test suite for intervals init and uninit. */ @@ -652,22 +662,27 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) sta.intervals = ce_rx_bl_intervals_alloc (&sta.ce_rx_bt, 4); + new_tm_mme_sent = false; + test_begin (t, "One interval, not restarting.") { sta.rx_tonemaps->default_tmi = 0; ce_rx_bl_intervals_update_default_tm (&ce_rx, &sta); test_fail_if (sta.rx_tonemaps->default_tmi != 4); + test_fail_if (new_tm_mme_sent != false); sta.rx_tonemaps->default_tmi = 4; ce_rx_bl_intervals_update_default_tm (&ce_rx, &sta); test_fail_if (sta.rx_tonemaps->default_tmi != 4); test_fail_if (sta.rx_tonemaps->tm[4]->released != 0); + test_fail_if (new_tm_mme_sent != false); sta.intervals->tmi[0] = 5; ce_rx_bl_intervals_update_default_tm (&ce_rx, &sta); test_fail_if (sta.rx_tonemaps->default_tmi != 5); test_fail_if (sta.rx_tonemaps->tm[4]->released != TONEMAP_RELEASE_TIMER_S); + test_fail_if (new_tm_mme_sent != false); } test_end; sta.rx_tonemaps->default_tmi = 4; @@ -680,6 +695,7 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) ce_rx_bl_intervals_update_default_tm (&ce_rx, &sta); test_fail_if (sta.rx_tonemaps->default_tmi != 4); test_fail_if (sta.rx_tonemaps->tm[4]->released != 0); + test_fail_if (new_tm_mme_sent != false); } test_end; test_begin (t, "One interval, restarting for a worst tonemap.") { @@ -688,6 +704,7 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) test_fail_if (sta.rx_tonemaps->default_tmi != 0); test_fail_if (sta.rx_tonemaps->tm[4]->released != TONEMAP_RELEASE_TIMER_S); + test_fail_if (new_tm_mme_sent != false); } test_end; /* Clean. */ @@ -705,11 +722,13 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) sta.rx_tonemaps->default_tmi = 0; ce_rx_bl_intervals_update_default_tm (&ce_rx, &sta); test_fail_if (sta.rx_tonemaps->default_tmi != 4); + test_fail_if (new_tm_mme_sent != false); sta.rx_tonemaps->default_tmi = 4; ce_rx_bl_intervals_update_default_tm (&ce_rx, &sta); test_fail_if (sta.rx_tonemaps->default_tmi != 4); test_fail_if (sta.rx_tonemaps->tm[4]->released != 0); + test_fail_if (new_tm_mme_sent != false); for (i = 0; i < ce_rx_bl_intervals_fsm_count_; i++) sta.intervals->tmi[i] = 5; @@ -717,6 +736,7 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) test_fail_if (sta.rx_tonemaps->default_tmi != 5); test_fail_if (sta.rx_tonemaps->tm[4]->released != TONEMAP_RELEASE_TIMER_S); + test_fail_if (new_tm_mme_sent != false); sta.rx_tonemaps->default_tmi = 4; sta.rx_tonemaps->tm[4]->released = 0; @@ -726,6 +746,7 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) test_fail_if (sta.rx_tonemaps->default_tmi != 0); test_fail_if (sta.rx_tonemaps->tm[4]->released != TONEMAP_RELEASE_TIMER_S); + test_fail_if (new_tm_mme_sent != false); sta.rx_tonemaps->default_tmi = 4; sta.rx_tonemaps->tm[4]->released = 0; @@ -747,15 +768,18 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) i++; } TONEMAP_READ_END; + test_fail_if (new_tm_mme_sent != true); sta.rx_tonemaps->default_tmi = 4; sta.rx_tonemaps->tm[4]->released = 0; + new_tm_mme_sent = false; sta.intervals->tmi[0] = 7; ce_rx_bl_intervals_update_default_tm (&ce_rx, &sta); test_fail_if (sta.rx_tonemaps->default_tmi != 0); test_fail_if (sta.rx_tonemaps->tm[4]->released != TONEMAP_RELEASE_TIMER_S); + test_fail_if (new_tm_mme_sent != false); } test_end; sta.rx_tonemaps->default_tmi = 4; @@ -782,10 +806,12 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) i++; } TONEMAP_READ_END; + test_fail_if (new_tm_mme_sent != true); } test_end; sta.rx_tonemaps->default_tmi = 4; sta.rx_tonemaps->tm[4]->released = 0; + new_tm_mme_sent = false; test_begin (t, "Several intervals, one restarting for a worst tonemap.") { @@ -795,6 +821,7 @@ test_suite_ce_rx_bl_intervals_update_default_tm (test_t t) test_fail_if (sta.rx_tonemaps->default_tmi != 0); test_fail_if (sta.rx_tonemaps->tm[4]->released != TONEMAP_RELEASE_TIMER_S); + test_fail_if (new_tm_mme_sent != false); } test_end; /* Clean. */ -- cgit v1.2.3