Mercurial > hg > vampy
comparison PyPlugin.cpp @ 27:046ba4183373
Some further mods to vampy construction
author | fazekasgy |
---|---|
date | Tue, 25 Aug 2009 08:46:15 +0000 |
parents | 7d28bed0864e |
children | 5139bf30f208 |
comparison
equal
deleted
inserted
replaced
26:ba3686eb697c | 27:046ba4183373 |
---|---|
87 m_processType(0), | 87 m_processType(0), |
88 m_pyProcess(NULL), | 88 m_pyProcess(NULL), |
89 m_inputDomain(TimeDomain) | 89 m_inputDomain(TimeDomain) |
90 { | 90 { |
91 // Create an instance | 91 // Create an instance |
92 MutexLocker locker(&m_pythonInterpreterMutex); | |
93 Py_INCREF(m_pyClass); | |
92 PyObject *pyInputSampleRate = PyFloat_FromDouble(inputSampleRate); | 94 PyObject *pyInputSampleRate = PyFloat_FromDouble(inputSampleRate); |
93 PyObject *args = PyTuple_Pack(1, pyInputSampleRate); | 95 PyObject *args = PyTuple_Pack(1, pyInputSampleRate); |
94 | 96 m_pyInstance = PyObject_Call(m_pyClass, args, NULL); |
95 m_pyInstance = PyObject_CallObject(m_pyClass, args); | 97 |
96 | 98 if (!m_pyInstance || PyErr_Occurred()) { |
97 if (!m_pyInstance) { | 99 if (PyErr_Occurred()) { PyErr_Print(); PyErr_Clear(); } |
100 Py_CLEAR(args); | |
101 Py_CLEAR(pyInputSampleRate); | |
98 cerr << "PyPlugin::PyPlugin: Failed to create Python plugin instance for key \"" << pluginKey << "\" (is the 1-arg class constructor from sample rate correctly provided?)" << endl; | 102 cerr << "PyPlugin::PyPlugin: Failed to create Python plugin instance for key \"" << pluginKey << "\" (is the 1-arg class constructor from sample rate correctly provided?)" << endl; |
99 throw std::string("Constructor failed"); | 103 throw std::string("Constructor failed"); |
100 } | 104 } |
101 | 105 Py_INCREF(m_pyInstance); |
102 Py_DECREF(args); | 106 Py_DECREF(args); |
103 Py_DECREF(pyInputSampleRate); | 107 Py_DECREF(pyInputSampleRate); |
108 | |
104 } | 109 } |
105 | 110 |
106 PyPlugin::~PyPlugin() | 111 PyPlugin::~PyPlugin() |
107 { | 112 { |
108 if (m_pyInstance) Py_DECREF(m_pyInstance); | 113 if (m_pyInstance) Py_DECREF(m_pyInstance); |
109 | 114 if (m_pyClass) Py_DECREF(m_pyClass); |
110 Py_CLEAR(m_pyProcess); | 115 if (m_pyProcess) Py_CLEAR(m_pyProcess); |
116 | |
111 #ifdef _DEBUG | 117 #ifdef _DEBUG |
112 cerr << "PyPlugin::PyPlugin:" << m_class | 118 cerr << "PyPlugin::PyPlugin:" << m_class |
113 << " Instance deleted." << endl; | 119 << " Instance deleted." << endl; |
114 #endif | 120 #endif |
115 } | 121 } |
613 | 619 |
614 ParameterList list; | 620 ParameterList list; |
615 ParameterDescriptor pd; | 621 ParameterDescriptor pd; |
616 char method[]="getParameterDescriptors"; | 622 char method[]="getParameterDescriptors"; |
617 cerr << "[call] " << method << endl; | 623 cerr << "[call] " << method << endl; |
624 | |
625 if (!m_pyInstance) {cerr << "Error: pyInstance is NULL" << endl; return list;} | |
618 | 626 |
619 //Check if the method is implemented in Python | 627 //Check if the method is implemented in Python |
620 if ( ! PyObject_HasAttrString(m_pyInstance,method) ) return list; | 628 if ( ! PyObject_HasAttrString(m_pyInstance,method) ) return list; |
621 | 629 |
622 //Call the method: must return list object (new reference) | 630 //Call the method: must return list object (new reference) |
676 case p::defaultValue: | 684 case p::defaultValue: |
677 pd.defaultValue = (float) PyFloat_AS_DOUBLE(pyValue); | 685 pd.defaultValue = (float) PyFloat_AS_DOUBLE(pyValue); |
678 break; | 686 break; |
679 case p::isQuantized: | 687 case p::isQuantized: |
680 pd.isQuantized = (bool) PyInt_AS_LONG(pyValue); | 688 pd.isQuantized = (bool) PyInt_AS_LONG(pyValue); |
681 break; case p::quantizeStep: | 689 break; |
690 case p::quantizeStep: | |
682 pd.quantizeStep = (float) PyFloat_AS_DOUBLE(pyValue); | 691 pd.quantizeStep = (float) PyFloat_AS_DOUBLE(pyValue); |
683 break; | 692 break; |
684 default : | 693 default : |
685 cerr << "Invalid key in Vamp OutputDescriptor: " << PyString_AsString(pyKey) << endl; | 694 cerr << "Invalid key in Vamp OutputDescriptor: " << PyString_AsString(pyKey) << endl; |
686 } | 695 } |