VampFeatureList * PluginAdapterBase::Impl::getRemainingFeatures(Plugin *plugin) { // std::cerr << "PluginAdapterBase::Impl::getRemainingFeatures" << std::endl; checkOutputMap(plugin); return convertFeatures(plugin, plugin->getRemainingFeatures()); }
unsigned int PluginAdapterBase::Impl::getOutputCount(Plugin *plugin) { checkOutputMap(plugin); return m_pluginOutputs[plugin]->size(); }
VampOutputDescriptor * PluginAdapterBase::Impl::getOutputDescriptor(Plugin *plugin, unsigned int i) { checkOutputMap(plugin); Plugin::OutputDescriptor &od = (*m_pluginOutputs[plugin])[i]; VampOutputDescriptor *desc = (VampOutputDescriptor *) malloc(sizeof(VampOutputDescriptor)); desc->identifier = strdup(od.identifier.c_str()); desc->name = strdup(od.name.c_str()); desc->description = strdup(od.description.c_str()); desc->unit = strdup(od.unit.c_str()); desc->hasFixedBinCount = od.hasFixedBinCount; desc->binCount = od.binCount; if (od.hasFixedBinCount && od.binCount > 0 // We would like to do "&& !od.binNames.empty()" here -- but we // can't, because it will crash older versions of the host adapter // which try to copy the names across whenever the bin count is // non-zero, regardless of whether they exist or not ) { desc->binNames = (const char **) malloc(od.binCount * sizeof(const char *)); for (unsigned int i = 0; i < od.binCount; ++i) { if (i < od.binNames.size()) { desc->binNames[i] = strdup(od.binNames[i].c_str()); } else { desc->binNames[i] = 0; } } } else { desc->binNames = 0; } desc->hasKnownExtents = od.hasKnownExtents; desc->minValue = od.minValue; desc->maxValue = od.maxValue; desc->isQuantized = od.isQuantized; desc->quantizeStep = od.quantizeStep; switch (od.sampleType) { case Plugin::OutputDescriptor::OneSamplePerStep: desc->sampleType = vampOneSamplePerStep; break; case Plugin::OutputDescriptor::FixedSampleRate: desc->sampleType = vampFixedSampleRate; break; case Plugin::OutputDescriptor::VariableSampleRate: desc->sampleType = vampVariableSampleRate; break; } desc->sampleRate = od.sampleRate; desc->hasDuration = od.hasDuration; return desc; }
VampFeatureList * PluginAdapterBase::Impl::process(Plugin *plugin, const float *const *inputBuffers, int sec, int nsec) { // std::cerr << "PluginAdapterBase::Impl::process" << std::endl; RealTime rt(sec, nsec); checkOutputMap(plugin); return convertFeatures(plugin, plugin->process(inputBuffers, rt)); }
VampOutputDescriptor * PluginAdapterBase::Impl::getOutputDescriptor(Plugin *plugin, unsigned int i) { checkOutputMap(plugin); Plugin::OutputDescriptor &od = (*m_pluginOutputs[plugin])[i]; VampOutputDescriptor *desc = (VampOutputDescriptor *) malloc(sizeof(VampOutputDescriptor)); desc->identifier = strdup(od.identifier.c_str()); desc->name = strdup(od.name.c_str()); desc->description = strdup(od.description.c_str()); desc->unit = strdup(od.unit.c_str()); desc->hasFixedBinCount = od.hasFixedBinCount; desc->binCount = od.binCount; if (od.hasFixedBinCount && od.binCount > 0) { desc->binNames = (const char **) malloc(od.binCount * sizeof(const char *)); for (unsigned int i = 0; i < od.binCount; ++i) { if (i < od.binNames.size()) { desc->binNames[i] = strdup(od.binNames[i].c_str()); } else { desc->binNames[i] = 0; } } } else { desc->binNames = 0; } desc->hasKnownExtents = od.hasKnownExtents; desc->minValue = od.minValue; desc->maxValue = od.maxValue; desc->isQuantized = od.isQuantized; desc->quantizeStep = od.quantizeStep; switch (od.sampleType) { case Plugin::OutputDescriptor::OneSamplePerStep: desc->sampleType = vampOneSamplePerStep; break; case Plugin::OutputDescriptor::FixedSampleRate: desc->sampleType = vampFixedSampleRate; break; case Plugin::OutputDescriptor::VariableSampleRate: desc->sampleType = vampVariableSampleRate; break; } desc->sampleRate = od.sampleRate; return desc; }