diff options
Diffstat (limited to 'src/engine/mix.hpp')
-rw-r--r-- | src/engine/mix.hpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/engine/mix.hpp b/src/engine/mix.hpp index ad12bad0..e84a63e6 100644 --- a/src/engine/mix.hpp +++ b/src/engine/mix.hpp @@ -28,19 +28,19 @@ using namespace Raul; namespace Ingen { inline void -mix(Context& context, Buffer* dst, const Buffer*const* srcs, uint32_t num_srcs) +mix(Context& context, Buffer* dst, const IntrusivePtr<Buffer>* srcs, uint32_t num_srcs) { using Shared::PortType; switch (dst->type().symbol()) { case PortType::AUDIO: case PortType::CONTROL: // Copy the first source - dst->copy(context, srcs[0]); + dst->copy(context, srcs[0].get()); // Mix in the rest for (uint32_t i = 1; i < num_srcs; ++i) { assert(srcs[i]->type() == PortType::AUDIO || srcs[i]->type() == PortType::CONTROL); - ((AudioBuffer*)dst)->accumulate(context, (AudioBuffer*)srcs[i]); + ((AudioBuffer*)dst)->accumulate(context, (AudioBuffer*)srcs[i].get()); } break; @@ -55,7 +55,7 @@ mix(Context& context, Buffer* dst, const Buffer*const* srcs, uint32_t num_srcs) while (true) { const EventBuffer* first = NULL; for (uint32_t i = 0; i < num_srcs; ++i) { - const EventBuffer* const src = (const EventBuffer*)srcs[i]; + const EventBuffer* const src = (const EventBuffer*)srcs[i].get(); if (src->is_valid()) { if (!first || src->get_event()->frames < first->get_event()->frames) first = src; @@ -76,7 +76,10 @@ mix(Context& context, Buffer* dst, const Buffer*const* srcs, uint32_t num_srcs) break; default: - error << "Mix of unsupported buffer types" << std::endl; + if (num_srcs == 1) + dst->copy(context, srcs[0].get()); + else + error << "Mix of unsupported buffer types" << std::endl; return; } } |