lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: This file copyright 2006 QMUL. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #include "PluginTransform.h" lbajardsilogic@0: lbajardsilogic@0: #include "vamp-sdk/PluginHostAdapter.h" lbajardsilogic@0: lbajardsilogic@0: PluginTransform::PluginTransform(Model *inputModel, lbajardsilogic@0: const ExecutionContext &context) : lbajardsilogic@0: Transform(inputModel), lbajardsilogic@0: m_context(context) lbajardsilogic@0: { lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: PluginTransform::ExecutionContext::ExecutionContext(int _c, size_t _bs) : lbajardsilogic@0: channel(_c), lbajardsilogic@0: domain(Vamp::Plugin::TimeDomain), lbajardsilogic@0: stepSize(_bs ? _bs : 1024), lbajardsilogic@0: blockSize(_bs ? _bs : 1024), lbajardsilogic@0: windowType(HanningWindow) lbajardsilogic@0: { lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: PluginTransform::ExecutionContext::ExecutionContext(int _c, size_t _ss, lbajardsilogic@0: size_t _bs, WindowType _wt) : lbajardsilogic@0: channel(_c), lbajardsilogic@0: domain(Vamp::Plugin::FrequencyDomain), lbajardsilogic@0: stepSize(_ss ? _ss : (_bs ? _bs / 2 : 512)), lbajardsilogic@0: blockSize(_bs ? _bs : 1024), lbajardsilogic@0: windowType(_wt) lbajardsilogic@0: { lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: PluginTransform::ExecutionContext::ExecutionContext(int _c, lbajardsilogic@0: const Vamp::PluginBase *_plugin) : lbajardsilogic@0: channel(_c), lbajardsilogic@0: domain(Vamp::Plugin::TimeDomain), lbajardsilogic@0: stepSize(0), lbajardsilogic@0: blockSize(0), lbajardsilogic@0: windowType(HanningWindow) lbajardsilogic@0: { lbajardsilogic@0: makeConsistentWithPlugin(_plugin); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: bool lbajardsilogic@0: PluginTransform::ExecutionContext::operator==(const ExecutionContext &c) lbajardsilogic@0: { lbajardsilogic@0: return (c.channel == channel && lbajardsilogic@0: c.domain == domain && lbajardsilogic@0: c.stepSize == stepSize && lbajardsilogic@0: c.blockSize == blockSize && lbajardsilogic@0: c.windowType == windowType); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PluginTransform::ExecutionContext::makeConsistentWithPlugin(const Vamp::PluginBase *_plugin) lbajardsilogic@0: { lbajardsilogic@0: const Vamp::Plugin *vp = dynamic_cast(_plugin); lbajardsilogic@0: if (!vp) { lbajardsilogic@0: vp = dynamic_cast(_plugin); //!!! why? lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: if (!vp) { lbajardsilogic@0: domain = Vamp::Plugin::TimeDomain; lbajardsilogic@0: if (!stepSize) { lbajardsilogic@0: if (!blockSize) blockSize = 1024; lbajardsilogic@0: stepSize = blockSize; lbajardsilogic@0: } else { lbajardsilogic@0: if (!blockSize) blockSize = stepSize; lbajardsilogic@0: } lbajardsilogic@0: } else { lbajardsilogic@0: domain = vp->getInputDomain(); lbajardsilogic@0: if (!stepSize) stepSize = vp->getPreferredStepSize(); lbajardsilogic@0: if (!blockSize) blockSize = vp->getPreferredBlockSize(); lbajardsilogic@0: if (!blockSize) blockSize = 1024; lbajardsilogic@0: if (!stepSize) { lbajardsilogic@0: if (domain == Vamp::Plugin::FrequencyDomain) { lbajardsilogic@0: stepSize = blockSize/2; lbajardsilogic@0: } else { lbajardsilogic@0: stepSize = blockSize; lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: