annotate vamp-hostsdk/PluginHostAdapter.h @ 525:8c18bdaad04f c++11-mutex

Avoid simple static allocation of mutex, as it could lead to mutex being destroyed before last adapter that needs to use it (since adapters are usually also static)
author Chris Cannam
date Mon, 09 Sep 2019 10:24:13 +0100
parents 4454843ff384
children
rev   line source
cannam@229 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
cannam@229 2
cannam@229 3 /*
cannam@229 4 Vamp
cannam@229 5
cannam@229 6 An API for audio analysis and feature extraction plugins.
cannam@229 7
cannam@229 8 Centre for Digital Music, Queen Mary, University of London.
cannam@229 9 Copyright 2006 Chris Cannam.
cannam@229 10
cannam@229 11 Permission is hereby granted, free of charge, to any person
cannam@229 12 obtaining a copy of this software and associated documentation
cannam@229 13 files (the "Software"), to deal in the Software without
cannam@229 14 restriction, including without limitation the rights to use, copy,
cannam@229 15 modify, merge, publish, distribute, sublicense, and/or sell copies
cannam@229 16 of the Software, and to permit persons to whom the Software is
cannam@229 17 furnished to do so, subject to the following conditions:
cannam@229 18
cannam@229 19 The above copyright notice and this permission notice shall be
cannam@229 20 included in all copies or substantial portions of the Software.
cannam@229 21
cannam@229 22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
cannam@229 23 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
cannam@229 24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
cannam@229 25 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
cannam@229 26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
cannam@229 27 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
cannam@229 28 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
cannam@229 29
cannam@229 30 Except as contained in this notice, the names of the Centre for
cannam@229 31 Digital Music; Queen Mary, University of London; and Chris Cannam
cannam@229 32 shall not be used in advertising or otherwise to promote the sale,
cannam@229 33 use or other dealings in this Software without prior written
cannam@229 34 authorization.
cannam@229 35 */
cannam@229 36
cannam@229 37 #ifndef _VAMP_PLUGIN_HOST_ADAPTER_H_
cannam@229 38 #define _VAMP_PLUGIN_HOST_ADAPTER_H_
cannam@229 39
cannam@243 40 #include "hostguard.h"
cannam@243 41 #include "Plugin.h"
cannam@243 42
cannam@229 43 #include <vamp/vamp.h>
cannam@229 44
cannam@229 45 #include <vector>
cannam@229 46
cannam@263 47 _VAMP_SDK_HOSTSPACE_BEGIN(PluginHostAdapter.h)
cannam@263 48
cannam@229 49 namespace Vamp {
cannam@229 50
cannam@229 51 /**
cannam@233 52 * \class PluginHostAdapter PluginHostAdapter.h <vamp-hostsdk/PluginHostAdapter.h>
cannam@229 53 *
cannam@229 54 * PluginHostAdapter is a wrapper class that a Vamp host can use to
cannam@229 55 * make the C-language VampPluginDescriptor object appear as a C++
cannam@229 56 * Vamp::Plugin object.
cannam@229 57 *
cannam@229 58 * The Vamp API is defined in vamp/vamp.h as a C API. The C++ objects
cannam@229 59 * used for convenience by plugins and hosts actually communicate
cannam@229 60 * using the C low-level API, but the details of this communication
cannam@229 61 * are handled seamlessly by the Vamp SDK implementation provided the
cannam@229 62 * plugin and host use the proper C++ wrapper objects.
cannam@229 63 *
cannam@229 64 * See also PluginAdapter, the plugin-side wrapper that makes a C++
cannam@229 65 * plugin object available using the C query API.
cannam@229 66 */
cannam@229 67
cannam@229 68 class PluginHostAdapter : public Plugin
cannam@229 69 {
cannam@229 70 public:
cannam@229 71 PluginHostAdapter(const VampPluginDescriptor *descriptor,
cannam@229 72 float inputSampleRate);
cannam@229 73 virtual ~PluginHostAdapter();
cannam@229 74
cannam@229 75 static std::vector<std::string> getPluginPath();
cannam@229 76
cannam@229 77 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
cannam@229 78 void reset();
cannam@229 79
cannam@229 80 InputDomain getInputDomain() const;
cannam@229 81
cannam@229 82 unsigned int getVampApiVersion() const;
cannam@229 83 std::string getIdentifier() const;
cannam@229 84 std::string getName() const;
cannam@229 85 std::string getDescription() const;
cannam@229 86 std::string getMaker() const;
cannam@229 87 int getPluginVersion() const;
cannam@229 88 std::string getCopyright() const;
cannam@229 89
cannam@229 90 ParameterList getParameterDescriptors() const;
cannam@229 91 float getParameter(std::string) const;
cannam@229 92 void setParameter(std::string, float);
cannam@229 93
cannam@229 94 ProgramList getPrograms() const;
cannam@229 95 std::string getCurrentProgram() const;
cannam@229 96 void selectProgram(std::string);
cannam@229 97
cannam@229 98 size_t getPreferredStepSize() const;
cannam@229 99 size_t getPreferredBlockSize() const;
cannam@229 100
cannam@229 101 size_t getMinChannelCount() const;
cannam@229 102 size_t getMaxChannelCount() const;
cannam@229 103
cannam@229 104 OutputList getOutputDescriptors() const;
cannam@229 105
cannam@229 106 FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
cannam@229 107
cannam@229 108 FeatureSet getRemainingFeatures();
cannam@229 109
cannam@229 110 protected:
cannam@229 111 void convertFeatures(VampFeatureList *, FeatureSet &);
cannam@229 112
cannam@229 113 const VampPluginDescriptor *m_descriptor;
cannam@229 114 VampPluginHandle m_handle;
cannam@229 115 };
cannam@229 116
cannam@229 117 }
cannam@229 118
cannam@263 119 _VAMP_SDK_HOSTSPACE_END(PluginHostAdapter.h)
cannam@263 120
cannam@229 121 #endif
cannam@229 122
cannam@229 123