Mercurial > hg > svcore
diff plugin/api/svp.h @ 58:0a34d529f8e0
* Add C API for feature extraction plugins
* First cut of an adapter class to make C++ feature extraction plugins
available using the C API. This will probably mutate quite a bit and
likely move to its own SDK tree.
author | Chris Cannam |
---|---|
date | Fri, 24 Mar 2006 17:36:10 +0000 |
parents | |
children | 3086ff194ea0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugin/api/svp.h Fri Mar 24 17:36:10 2006 +0000 @@ -0,0 +1,139 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser Plugin API + A plugin interface for audio feature extraction plugins. + Centre for Digital Music, Queen Mary, University of London. + Copyright 2006 Chris Cannam. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2.1 + of the License, or (at your option) any later version. See the + file COPYING included with this distribution for more information. +*/ + +#ifndef SVP_HEADER_INCLUDED +#define SVP_HEADER_INCLUDED + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _SVPParameterDescriptor +{ + const char *name; + const char *description; + const char *unit; + float minValue; + float maxValue; + float defaultValue; + int isQuantized; + float quantizeStep; + +} SVPParameterDescriptor; + +typedef enum +{ + svpOneSamplePerStep, + svpFixedSampleRate, + svpVariableSampleRate + +} SVPSampleType; + +typedef struct _SVPOutputDescriptor +{ + const char *name; + const char *description; + const char *unit; + int hasFixedValueCount; + unsigned int valueCount; + const char **valueNames; + int hasKnownExtents; + float minValue; + float maxValue; + int isQuantized; + float quantizeStep; + SVPSampleType sampleType; + float sampleRate; + +} SVPOutputDescriptor; + +typedef struct _SVPFeature +{ + int hasTimestamp; + int sec; + int nsec; + unsigned int valueCount; + float *values; + char *label; + +} SVPFeature; + +typedef struct _SVPFeatureList +{ + unsigned int featureCount; + SVPFeature *features; + +} SVPFeatureList; + +typedef void *SVPPluginHandle; + +typedef struct _SVPPluginDescriptor +{ + const char *name; + const char *description; + const char *maker; + int pluginVersion; + const char *copyright; + unsigned int parameterCount; + const SVPParameterDescriptor **parameters; + unsigned int programCount; + const char **programs; + + SVPPluginHandle (*instantiate)(const struct _SVPPluginDescriptor *, + float inputSampleRate); + + void (*cleanup)(SVPPluginHandle); + + int (*initialise)(SVPPluginHandle, + unsigned int inputChannels, + unsigned int stepSize, + unsigned int blockSize); + + void (*reset)(SVPPluginHandle); + + float (*getParameter)(SVPPluginHandle, int); + void (*setParameter)(SVPPluginHandle, int, float); + + unsigned int (*getCurrentProgram)(SVPPluginHandle); + void (*selectProgram)(SVPPluginHandle, unsigned int); + + unsigned int (*getPreferredStepSize)(SVPPluginHandle); + unsigned int (*getPreferredBlockSize)(SVPPluginHandle); + unsigned int (*getMinChannelCount)(SVPPluginHandle); + unsigned int (*getMaxChannelCount)(SVPPluginHandle); + unsigned int (*getOutputCount)(SVPPluginHandle); + + SVPOutputDescriptor *(*getOutputDescriptor)(SVPPluginHandle, + unsigned int); + void (*releaseOutputDescriptor)(SVPOutputDescriptor *); + + SVPFeatureList **(*process)(SVPPluginHandle, + float **inputBuffers, + int sec, + int nsec); + SVPFeatureList **(*getRemainingFeatures)(SVPPluginHandle); + void (*releaseFeatureSet)(SVPFeatureList **); + +} SVPPluginDescriptor; + +const SVPPluginDescriptor *svpGetPluginDescriptor(unsigned int index); + +typedef const SVPPluginDescriptor *(SVPGetPluginDescriptorFunction)(unsigned int); + +#ifdef __cplusplus +} +#endif + +#endif