summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/block_allocator.cpp1
-rw-r--r--lib/block_handlers.cpp7
-rw-r--r--lib/block_task.cpp4
-rw-r--r--lib/gras_impl/input_buffer_queues.hpp2
4 files changed, 11 insertions, 3 deletions
diff --git a/lib/block_allocator.cpp b/lib/block_allocator.cpp
index a600343..e26f350 100644
--- a/lib/block_allocator.cpp
+++ b/lib/block_allocator.cpp
@@ -110,6 +110,7 @@ SBufferToken Block::output_buffer_allocator(
config.affinity = (*this)->buffer_affinity;
config.token = token;
SBuffer buff(config);
+ std::memset(buff.get_actual_memory(), 0, buff.get_actual_length());
//buffer derefs here and the token messages it back to the block
}
return token;
diff --git a/lib/block_handlers.cpp b/lib/block_handlers.cpp
index 6db4ca3..a3a42b6 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 = true;
+ this->forecast_enable = num_outputs != 0 and num_inputs != 0;
this->input_tokens.resize(num_inputs);
this->output_tokens.resize(num_outputs);
@@ -209,7 +209,10 @@ void ElementImpl::input_update(const tsbe::TaskInterface &task_iface)
{
//TODO, this is a little cheap, we only look at output multiple [0]
const size_t multiple = (num_outputs)?this->output_multiple_items.front():1;
- this->input_multiple_items[i] = size_t(std::ceil(multiple/this->relative_rate));
+ if (this->enable_fixed_rate)
+ {
+ this->input_multiple_items[i] = size_t(std::ceil(multiple/this->relative_rate));
+ }
if (this->input_multiple_items[i] == 0) this->input_multiple_items[i] = 1;
}
diff --git a/lib/block_task.cpp b/lib/block_task.cpp
index 7648e34..8f70daa 100644
--- a/lib/block_task.cpp
+++ b/lib/block_task.cpp
@@ -181,6 +181,10 @@ void ElementImpl::handle_task(const tsbe::TaskInterface &task_iface)
{
forecast_again_you_jerk:
fcast_ninput_items = work_ninput_items;
+ {
+ num_output_items /= this->output_multiple_items.front();
+ num_output_items *= this->output_multiple_items.front();
+ }
block_ptr->forecast(num_output_items, fcast_ninput_items);
for (size_t i = 0; i < num_inputs; i++)
{
diff --git a/lib/gras_impl/input_buffer_queues.hpp b/lib/gras_impl/input_buffer_queues.hpp
index 218a93d..f205edf 100644
--- a/lib/gras_impl/input_buffer_queues.hpp
+++ b/lib/gras_impl/input_buffer_queues.hpp
@@ -232,7 +232,7 @@ inline SBuffer InputBufferQueues::front(const size_t i, bool &potential_inline)
VAR(buff.length);*/
//set the flag that this buffer *might* be inlined as an output buffer
- potential_inline = unique and (_history_bytes[i] == 0) and (buff.length == front.length);
+ potential_inline = unique and (buff.length == front.length);
return buff;
}