From f8b41cfacd40b5fe6ce9807598b6163837026b59 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 19 Sep 2012 05:05:16 -0700 Subject: nop for default forecast, always call --- lib/block.cpp | 14 +++----------- lib/block_handlers.cpp | 2 +- lib/gras_impl/input_buffer_queues.hpp | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/lib/block.cpp b/lib/block.cpp index d5e2399..c391c05 100644 --- a/lib/block.cpp +++ b/lib/block.cpp @@ -220,17 +220,9 @@ void Block::get_tags_in_range( } } -void Block::forecast( - int noutput_items, - std::vector &ninput_items_required -){ - if (not (*this)->enable_fixed_rate) return; - for (size_t i = 0; i < ninput_items_required.size(); i++) - { - ninput_items_required[i] = - (*this)->input_history_items[i] + - myulround((noutput_items/(*this)->relative_rate)); - } +void Block::forecast(int, std::vector &) +{ + //NOP } bool Block::start(void) diff --git a/lib/block_handlers.cpp b/lib/block_handlers.cpp index a069387..6db4ca3 100644 --- a/lib/block_handlers.cpp +++ b/lib/block_handlers.cpp @@ -177,7 +177,7 @@ void ElementImpl::topology_update(const tsbe::TaskInterface &task_iface) this->produce_items.resize(num_outputs, 0); this->input_queues.resize(num_inputs); this->output_queues.resize(num_outputs); - this->forecast_enable = not this->enable_fixed_rate; + this->forecast_enable = true; this->input_tokens.resize(num_inputs); this->output_tokens.resize(num_outputs); diff --git a/lib/gras_impl/input_buffer_queues.hpp b/lib/gras_impl/input_buffer_queues.hpp index c4e105c..218a93d 100644 --- a/lib/gras_impl/input_buffer_queues.hpp +++ b/lib/gras_impl/input_buffer_queues.hpp @@ -158,6 +158,7 @@ inline void InputBufferQueues::init( _aux_queues[i] = boost::shared_ptr(new BufferQueue()); //determine byte sizes for buffers and dealing with history + const size_t old_history = _history_bytes[i]; _history_bytes[i] = input_item_sizes[i]*input_history_items[i]; //calculate the input multiple aka reserve size @@ -182,20 +183,27 @@ inline void InputBufferQueues::init( _aux_queues[i]->allocate_one(num_bytes); //there is history, so enqueue some initial history - if (_history_bytes[i] != 0 and _enqueued_bytes[i] < _history_bytes[i]) + if (_history_bytes[i] > old_history) { SBuffer buff = _aux_queues[i]->front(); _aux_queues[i]->pop(); - const size_t hist_bytes = _history_bytes[i]; - std::memset(buff.get_actual_memory(), 0, hist_bytes); + const size_t delta = _history_bytes[i] - old_history; + std::memset(buff.get_actual_memory(), 0, delta); buff.offset = 0; - buff.length = hist_bytes; + buff.length = delta; this->push(i, buff); //_queues[i].push_front(buff); //_in_hist_buff[i] = true; } + if (_history_bytes[i] < old_history) + { + size_t delta = old_history - _history_bytes[i]; + delta = std::min(delta, _enqueued_bytes[i]); //FIXME + //TODO consume extra delta on push...? so we dont need std::min + this->consume(i, delta); + } } } -- cgit