diff options
Diffstat (limited to 'src/engine/mix.hpp')
-rw-r--r-- | src/engine/mix.hpp | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/src/engine/mix.hpp b/src/engine/mix.hpp deleted file mode 100644 index 3797396b..00000000 --- a/src/engine/mix.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* This file is part of Ingen. - * Copyright 2007-2011 David Robillard <http://drobilla.net> - * - * Ingen is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any later - * version. - * - * Ingen is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef INGEN_ENGINE_MIX_HPP -#define INGEN_ENGINE_MIX_HPP - -#include "raul/log.hpp" -#include "ingen/PortType.hpp" -#include "Buffer.hpp" -#include "Context.hpp" - -using namespace Raul; - -namespace Ingen { -namespace Engine { - -inline void -mix(Context& context, Buffer* dst, const IntrusivePtr<Buffer>* srcs, uint32_t num_srcs) -{ - using Ingen::PortType; - switch (dst->type().symbol()) { - case PortType::AUDIO: - case PortType::CONTROL: - // Copy the first source - 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].get()); - } - - break; - - case PortType::EVENTS: - dst->clear(); - for (uint32_t i = 0; i < num_srcs; ++i) { - assert(srcs[i]->type() == PortType::EVENTS); - srcs[i]->rewind(); - } - - while (true) { - const EventBuffer* first = NULL; - for (uint32_t i = 0; i < num_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; - } - } - if (first) { - const LV2_Event* const ev = first->get_event(); - ((EventBuffer*)dst)->append( - ev->frames, ev->subframes, ev->type, ev->size, - (const uint8_t*)ev + sizeof(LV2_Event)); - first->increment(); - } else { - break; - } - } - - dst->rewind(); - break; - - default: - if (num_srcs == 1) - dst->copy(context, srcs[0].get()); - else - error << "Mix of unsupported buffer types" << std::endl; - return; - } -} - -} // namespace Engine -} // namespace Ingen - -#endif // INGEN_ENGINE_MIX_HPP |