summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorCyril Jourdan2013-05-31 09:50:00 +0200
committerCyril Jourdan2013-06-06 15:38:23 +0200
commit7af1a533f0e2eb40949748053531f03aab72eb19 (patch)
tree2b399564f877bca6f023b5bee0abd6af23502846 /cesar
parent631a60b068c53fc1939d1f90deec7536d8339ddc (diff)
cesar/ce/rx/bl: send new default tonemap after computation, closes #4026
Diffstat (limited to 'cesar')
-rw-r--r--cesar/ce/rx/bitloading/src/intervals.c11
-rw-r--r--cesar/ce/rx/bitloading/test/src/test_intervals.c27
2 files changed, 38 insertions, 0 deletions
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. */