annotate PyFeature.h @ 53:7e59caea821b

* Make a better job of preloading Python, especially when it's in a framework. Go for the Python file in the frameworks directory in preference to any libpythonX.Y.dylib. Particularly, don't try to preload any library without an absolute path until we've exhausted all our framework possibilities (so as to avoid picking up an ancient system library).
author cannam
date Fri, 09 Oct 2009 13:48:25 +0000
parents 27bab3a16c9a
children f5c028376bf9
rev   line source
fazekasgy@37 1 /*
fazekasgy@37 2
fazekasgy@37 3 * Vampy : This plugin is a wrapper around the Vamp plugin API.
fazekasgy@37 4 * It allows for writing Vamp plugins in Python.
fazekasgy@37 5
fazekasgy@37 6 * Centre for Digital Music, Queen Mary University of London.
fazekasgy@37 7 * Copyright (C) 2008-2009 Gyorgy Fazekas, QMUL. (See Vamp sources
fazekasgy@37 8 * for licence information.)
fazekasgy@37 9
fazekasgy@37 10 */
fazekasgy@37 11
fazekasgy@37 12 /*
fazekasgy@37 13 NOTES: There are two ways to implement the Vamp::Feature wrapper.
fazekasgy@37 14 1) We could keep a Vamp::Feature in the object and
fazekasgy@37 15 convert the values on the fly as they are inserted.
fazekasgy@37 16 However, this requires a way to convert back to Python for
fazekasgy@37 17 this object to be fully usable in python code. These conversions
fazekasgy@37 18 are otherwise unnecessary.
fazekasgy@37 19
fazekasgy@37 20 2) Keep the python attribute objects in a dict as it is normally
fazekasgy@37 21 done in python classes, and convert when the object is returned.
fazekasgy@37 22 This way the object is usable by the interpreter until it is returned
fazekasgy@37 23 to the C++ plugin wrapper.
fazekasgy@37 24 This is different form the Vampy:PyRealTime implementation where the
fazekasgy@37 25 two-way conversion makes more sense (in fact required). Note: For
fazekasgy@37 26 a host implementation option 1) will be required.
fazekasgy@37 27
fazekasgy@37 28 */
fazekasgy@37 29
fazekasgy@37 30 #ifndef _PYFEATURE_H_
fazekasgy@37 31 #define _PYFEATURE_H_
fazekasgy@37 32
fazekasgy@37 33 #include "vamp-sdk/Plugin.h"
fazekasgy@37 34 // #include "PyTypeInterface.h"
fazekasgy@37 35
fazekasgy@37 36
fazekasgy@37 37 typedef struct {
fazekasgy@37 38 PyObject_HEAD
fazekasgy@37 39 PyObject *dict;
fazekasgy@37 40 // Vamp::Plugin::Feature *feature;
fazekasgy@37 41 /// pointer to type interface required: PyTypeInterface ti;
fazekasgy@37 42 } FeatureObject;
fazekasgy@37 43
fazekasgy@37 44 PyAPI_DATA(PyTypeObject) Feature_Type;
fazekasgy@37 45
fazekasgy@37 46 #define PyFeature_CheckExact(v) ((v)->ob_type == &Feature_Type)
fazekasgy@37 47 #define PyFeature_Check(v) PyObject_TypeCheck(v, &Feature_Type)
fazekasgy@37 48
fazekasgy@37 49 ///fast macro version as per API convention
fazekasgy@37 50 #define PyFeature_AS_DICT(v) ((const FeatureObject* const) (v))->dict
fazekasgy@37 51 // #define PyFeature_AS_FEATURE(v) ((const FeatureObject* const) (v))->feature
fazekasgy@37 52
fazekasgy@37 53
fazekasgy@37 54 /* PyFeature C++ API */
fazekasgy@37 55
fazekasgy@37 56 /* Not required here:
fazekasgy@37 57 we will never have to pass a feature back from the wrapper */
fazekasgy@37 58 // PyAPI_FUNC(PyObject *)
fazekasgy@37 59 // PyFeature_FromFeature(Vamp::Plugin::Feature&);
fazekasgy@37 60
fazekasgy@37 61 // PyAPI_FUNC(const Vamp::Plugin::Feature*)
fazekasgy@37 62 // PyFeature_AsFeature (PyObject *self);
fazekasgy@37 63
fazekasgy@37 64
fazekasgy@37 65
fazekasgy@37 66 #endif