diff options
author | Josh Blum | 2012-09-09 19:41:29 -0700 |
---|---|---|
committer | Josh Blum | 2012-09-09 19:41:29 -0700 |
commit | 0ed890033370ae853014f0d34065d9f566e86e54 (patch) | |
tree | 537e0968d7e10913fbb7e42622571d99f6b9eb0e | |
parent | 753237c73815a5c18f29a4bbd9df05b6af8b8e57 (diff) | |
download | sandhi-0ed890033370ae853014f0d34065d9f566e86e54.tar.gz sandhi-0ed890033370ae853014f0d34065d9f566e86e54.tar.bz2 sandhi-0ed890033370ae853014f0d34065d9f566e86e54.zip |
simplify forecast and its fail logic
-rw-r--r-- | lib/block_handlers.cpp | 2 | ||||
-rw-r--r-- | lib/block_task.cpp | 28 | ||||
-rw-r--r-- | lib/element_impl.hpp | 2 |
3 files changed, 15 insertions, 17 deletions
diff --git a/lib/block_handlers.cpp b/lib/block_handlers.cpp index 73dc20a..d63c1a9 100644 --- a/lib/block_handlers.cpp +++ b/lib/block_handlers.cpp @@ -134,6 +134,7 @@ void ElementImpl::topology_update(const tsbe::TaskInterface &task_iface) this->work_input_items.resize(num_inputs); this->work_output_items.resize(num_outputs); this->work_ninput_items.resize(num_inputs); + this->fcast_ninput_items.resize(num_inputs); this->input_items.resize(num_inputs); this->output_items.resize(num_outputs); this->consume_items.resize(num_inputs, 0); @@ -141,6 +142,7 @@ void ElementImpl::topology_update(const tsbe::TaskInterface &task_iface) this->input_queues.resize(num_inputs); this->output_queues.resize(num_outputs); this->output_bytes_offset.resize(num_outputs, 0); + this->forecast_enable = not this->enable_fixed_rate; this->input_tokens.resize(num_inputs); this->output_tokens.resize(num_outputs); diff --git a/lib/block_task.cpp b/lib/block_task.cpp index 5b3ae00..b9347e8 100644 --- a/lib/block_task.cpp +++ b/lib/block_task.cpp @@ -157,26 +157,20 @@ void ElementImpl::handle_task(const tsbe::TaskInterface &task_iface) //-- forecast //------------------------------------------------------------------ forecast_again_you_jerk: - if (not this->enable_fixed_rate) + if (this->forecast_enable) { - block_ptr->forecast(num_output_items, work_ninput_items); + fcast_ninput_items = work_ninput_items; + block_ptr->forecast(num_output_items, fcast_ninput_items); for (size_t i = 0; i < num_inputs; i++) { - if (size_t(work_ninput_items[i]) > this->input_items[i].size()) - { - for (size_t j = 0; j < num_inputs; j++) - { - work_ninput_items[j] = this->input_items[j]._len; - } - num_output_items = num_output_items/2; - if (num_output_items == 0) - { - this->forecast_fail = true; - this->conclusion(task_iface, inputs_done); - return; - } - goto forecast_again_you_jerk; - } + if (fcast_ninput_items[i] <= work_ninput_items[i]) continue; + + num_output_items = num_output_items/2; //backoff regime + if (num_output_items) goto forecast_again_you_jerk; + + this->forecast_fail = true; + this->conclusion(task_iface, inputs_done); + return; } } this->forecast_fail = false; diff --git a/lib/element_impl.hpp b/lib/element_impl.hpp index cf7f164..6a9c088 100644 --- a/lib/element_impl.hpp +++ b/lib/element_impl.hpp @@ -64,6 +64,7 @@ struct ElementImpl std::vector<const void *> work_input_items; std::vector<void *> work_output_items; std::vector<int> work_ninput_items; + std::vector<int> fcast_ninput_items; //work buffers for the new work interface Block::InputItems input_items; @@ -130,6 +131,7 @@ struct ElementImpl bool enable_fixed_rate; double relative_rate; bool forecast_fail; + bool forecast_enable; }; } //namespace gnuradio |