comparison vamp-sdk/PluginAdapter.cpp @ 22:1eb44d33a371

* Rename simplehost to vamp-simple-host * Add a temporary test for validity of plugin instances with overlapping lifespans
author cannam
date Mon, 24 Apr 2006 12:58:27 +0000
parents 61887dda7fe0
children db01ce9e7657
comparison
equal deleted inserted replaced
21:16eeab18bf72 22:1eb44d33a371
34 authorization. 34 authorization.
35 */ 35 */
36 36
37 #include "PluginAdapter.h" 37 #include "PluginAdapter.h"
38 38
39 #define DEBUG_PLUGIN_ADAPTER 1
40
41
39 namespace Vamp { 42 namespace Vamp {
40 43
41 PluginAdapterBase::PluginAdapterBase() : 44 PluginAdapterBase::PluginAdapterBase() :
42 m_populated(false) 45 m_populated(false)
43 { 46 {
47 #ifdef DEBUG_PLUGIN_ADAPTER
48 std::cerr << "PluginAdapterBase[" << this << "]::PluginAdapterBase" << std::endl;
49 #endif
44 } 50 }
45 51
46 const VampPluginDescriptor * 52 const VampPluginDescriptor *
47 PluginAdapterBase::getDescriptor() 53 PluginAdapterBase::getDescriptor()
48 { 54 {
55 #ifdef DEBUG_PLUGIN_ADAPTER
56 std::cerr << "PluginAdapterBase[" << this << "]::getDescriptor" << std::endl;
57 #endif
58
49 if (m_populated) return &m_descriptor; 59 if (m_populated) return &m_descriptor;
50 60
51 Plugin *plugin = createPlugin(48000); 61 Plugin *plugin = createPlugin(48000);
52 62
53 m_parameters = plugin->getParameterDescriptors(); 63 m_parameters = plugin->getParameterDescriptors();
132 return &m_descriptor; 142 return &m_descriptor;
133 } 143 }
134 144
135 PluginAdapterBase::~PluginAdapterBase() 145 PluginAdapterBase::~PluginAdapterBase()
136 { 146 {
147 #ifdef DEBUG_PLUGIN_ADAPTER
148 std::cerr << "PluginAdapterBase[" << this << "]::~PluginAdapterBase" << std::endl;
149 #endif
150
137 if (!m_populated) return; 151 if (!m_populated) return;
138 152
139 free((void *)m_descriptor.name); 153 free((void *)m_descriptor.name);
140 free((void *)m_descriptor.description); 154 free((void *)m_descriptor.description);
141 free((void *)m_descriptor.maker); 155 free((void *)m_descriptor.maker);
172 } 186 }
173 187
174 PluginAdapterBase * 188 PluginAdapterBase *
175 PluginAdapterBase::lookupAdapter(VampPluginHandle handle) 189 PluginAdapterBase::lookupAdapter(VampPluginHandle handle)
176 { 190 {
191 #ifdef DEBUG_PLUGIN_ADAPTER
192 std::cerr << "PluginAdapterBase::lookupAdapter(" << handle << ")" << std::endl;
193 #endif
194
177 if (!m_adapterMap) return 0; 195 if (!m_adapterMap) return 0;
178 AdapterMap::const_iterator i = m_adapterMap->find(handle); 196 AdapterMap::const_iterator i = m_adapterMap->find(handle);
179 if (i == m_adapterMap->end()) return 0; 197 if (i == m_adapterMap->end()) return 0;
180 return i->second; 198 return i->second;
181 } 199 }
182 200
183 VampPluginHandle 201 VampPluginHandle
184 PluginAdapterBase::vampInstantiate(const VampPluginDescriptor *desc, 202 PluginAdapterBase::vampInstantiate(const VampPluginDescriptor *desc,
185 float inputSampleRate) 203 float inputSampleRate)
186 { 204 {
205 #ifdef DEBUG_PLUGIN_ADAPTER
206 std::cerr << "PluginAdapterBase::vampInstantiate(" << desc << ")" << std::endl;
207 #endif
208
187 if (!m_adapterMap) { 209 if (!m_adapterMap) {
188 m_adapterMap = new AdapterMap(); 210 m_adapterMap = new AdapterMap();
189 } 211 }
190 212
191 if (m_adapterMap->find(desc) == m_adapterMap->end()) { 213 if (m_adapterMap->find(desc) == m_adapterMap->end()) {
199 Plugin *plugin = adapter->createPlugin(inputSampleRate); 221 Plugin *plugin = adapter->createPlugin(inputSampleRate);
200 if (plugin) { 222 if (plugin) {
201 (*m_adapterMap)[plugin] = adapter; 223 (*m_adapterMap)[plugin] = adapter;
202 } 224 }
203 225
226 #ifdef DEBUG_PLUGIN_ADAPTER
227 std::cerr << "PluginAdapterBase::vampInstantiate(" << desc << "): returning handle " << plugin << std::endl;
228 #endif
229
204 return plugin; 230 return plugin;
205 } 231 }
206 232
207 void 233 void
208 PluginAdapterBase::vampCleanup(VampPluginHandle handle) 234 PluginAdapterBase::vampCleanup(VampPluginHandle handle)
209 { 235 {
236 #ifdef DEBUG_PLUGIN_ADAPTER
237 std::cerr << "PluginAdapterBase::vampCleanup(" << handle << ")" << std::endl;
238 #endif
239
210 PluginAdapterBase *adapter = lookupAdapter(handle); 240 PluginAdapterBase *adapter = lookupAdapter(handle);
211 if (!adapter) { 241 if (!adapter) {
212 delete ((Plugin *)handle); 242 delete ((Plugin *)handle);
213 return; 243 return;
214 } 244 }
219 PluginAdapterBase::vampInitialise(VampPluginHandle handle, 249 PluginAdapterBase::vampInitialise(VampPluginHandle handle,
220 unsigned int channels, 250 unsigned int channels,
221 unsigned int stepSize, 251 unsigned int stepSize,
222 unsigned int blockSize) 252 unsigned int blockSize)
223 { 253 {
254 #ifdef DEBUG_PLUGIN_ADAPTER
255 std::cerr << "PluginAdapterBase::vampInitialise(" << handle << ", " << channels << ", " << stepSize << ", " << blockSize << ")" << std::endl;
256 #endif
257
224 bool result = ((Plugin *)handle)->initialise 258 bool result = ((Plugin *)handle)->initialise
225 (channels, stepSize, blockSize); 259 (channels, stepSize, blockSize);
226 return result ? 1 : 0; 260 return result ? 1 : 0;
227 } 261 }
228 262
229 void 263 void
230 PluginAdapterBase::vampReset(VampPluginHandle handle) 264 PluginAdapterBase::vampReset(VampPluginHandle handle)
231 { 265 {
266 #ifdef DEBUG_PLUGIN_ADAPTER
267 std::cerr << "PluginAdapterBase::vampReset(" << handle << ")" << std::endl;
268 #endif
269
232 ((Plugin *)handle)->reset(); 270 ((Plugin *)handle)->reset();
233 } 271 }
234 272
235 float 273 float
236 PluginAdapterBase::vampGetParameter(VampPluginHandle handle, 274 PluginAdapterBase::vampGetParameter(VampPluginHandle handle,
237 int param) 275 int param)
238 { 276 {
277 #ifdef DEBUG_PLUGIN_ADAPTER
278 std::cerr << "PluginAdapterBase::vampGetParameter(" << handle << ", " << param << ")" << std::endl;
279 #endif
280
239 PluginAdapterBase *adapter = lookupAdapter(handle); 281 PluginAdapterBase *adapter = lookupAdapter(handle);
240 if (!adapter) return 0.0; 282 if (!adapter) return 0.0;
241 Plugin::ParameterList &list = adapter->m_parameters; 283 Plugin::ParameterList &list = adapter->m_parameters;
242 return ((Plugin *)handle)->getParameter(list[param].name); 284 return ((Plugin *)handle)->getParameter(list[param].name);
243 } 285 }
244 286
245 void 287 void
246 PluginAdapterBase::vampSetParameter(VampPluginHandle handle, 288 PluginAdapterBase::vampSetParameter(VampPluginHandle handle,
247 int param, float value) 289 int param, float value)
248 { 290 {
291 #ifdef DEBUG_PLUGIN_ADAPTER
292 std::cerr << "PluginAdapterBase::vampSetParameter(" << handle << ", " << param << ", " << value << ")" << std::endl;
293 #endif
294
249 PluginAdapterBase *adapter = lookupAdapter(handle); 295 PluginAdapterBase *adapter = lookupAdapter(handle);
250 if (!adapter) return; 296 if (!adapter) return;
251 Plugin::ParameterList &list = adapter->m_parameters; 297 Plugin::ParameterList &list = adapter->m_parameters;
252 ((Plugin *)handle)->setParameter(list[param].name, value); 298 ((Plugin *)handle)->setParameter(list[param].name, value);
253 } 299 }
254 300
255 unsigned int 301 unsigned int
256 PluginAdapterBase::vampGetCurrentProgram(VampPluginHandle handle) 302 PluginAdapterBase::vampGetCurrentProgram(VampPluginHandle handle)
257 { 303 {
304 #ifdef DEBUG_PLUGIN_ADAPTER
305 std::cerr << "PluginAdapterBase::vampGetCurrentProgram(" << handle << ")" << std::endl;
306 #endif
307
258 PluginAdapterBase *adapter = lookupAdapter(handle); 308 PluginAdapterBase *adapter = lookupAdapter(handle);
259 if (!adapter) return 0; 309 if (!adapter) return 0;
260 Plugin::ProgramList &list = adapter->m_programs; 310 Plugin::ProgramList &list = adapter->m_programs;
261 std::string program = ((Plugin *)handle)->getCurrentProgram(); 311 std::string program = ((Plugin *)handle)->getCurrentProgram();
262 for (unsigned int i = 0; i < list.size(); ++i) { 312 for (unsigned int i = 0; i < list.size(); ++i) {
267 317
268 void 318 void
269 PluginAdapterBase::vampSelectProgram(VampPluginHandle handle, 319 PluginAdapterBase::vampSelectProgram(VampPluginHandle handle,
270 unsigned int program) 320 unsigned int program)
271 { 321 {
322 #ifdef DEBUG_PLUGIN_ADAPTER
323 std::cerr << "PluginAdapterBase::vampSelectProgram(" << handle << ", " << program << ")" << std::endl;
324 #endif
325
272 PluginAdapterBase *adapter = lookupAdapter(handle); 326 PluginAdapterBase *adapter = lookupAdapter(handle);
273 if (!adapter) return; 327 if (!adapter) return;
274 Plugin::ProgramList &list = adapter->m_programs; 328 Plugin::ProgramList &list = adapter->m_programs;
275 ((Plugin *)handle)->selectProgram(list[program]); 329 ((Plugin *)handle)->selectProgram(list[program]);
276 } 330 }
277 331
278 unsigned int 332 unsigned int
279 PluginAdapterBase::vampGetPreferredStepSize(VampPluginHandle handle) 333 PluginAdapterBase::vampGetPreferredStepSize(VampPluginHandle handle)
280 { 334 {
335 #ifdef DEBUG_PLUGIN_ADAPTER
336 std::cerr << "PluginAdapterBase::vampGetPreferredStepSize(" << handle << ")" << std::endl;
337 #endif
338
281 return ((Plugin *)handle)->getPreferredStepSize(); 339 return ((Plugin *)handle)->getPreferredStepSize();
282 } 340 }
283 341
284 unsigned int 342 unsigned int
285 PluginAdapterBase::vampGetPreferredBlockSize(VampPluginHandle handle) 343 PluginAdapterBase::vampGetPreferredBlockSize(VampPluginHandle handle)
286 { 344 {
345 #ifdef DEBUG_PLUGIN_ADAPTER
346 std::cerr << "PluginAdapterBase::vampGetPreferredBlockSize(" << handle << ")" << std::endl;
347 #endif
348
287 return ((Plugin *)handle)->getPreferredBlockSize(); 349 return ((Plugin *)handle)->getPreferredBlockSize();
288 } 350 }
289 351
290 unsigned int 352 unsigned int
291 PluginAdapterBase::vampGetMinChannelCount(VampPluginHandle handle) 353 PluginAdapterBase::vampGetMinChannelCount(VampPluginHandle handle)
292 { 354 {
355 #ifdef DEBUG_PLUGIN_ADAPTER
356 std::cerr << "PluginAdapterBase::vampGetMinChannelCount(" << handle << ")" << std::endl;
357 #endif
358
293 return ((Plugin *)handle)->getMinChannelCount(); 359 return ((Plugin *)handle)->getMinChannelCount();
294 } 360 }
295 361
296 unsigned int 362 unsigned int
297 PluginAdapterBase::vampGetMaxChannelCount(VampPluginHandle handle) 363 PluginAdapterBase::vampGetMaxChannelCount(VampPluginHandle handle)
298 { 364 {
365 #ifdef DEBUG_PLUGIN_ADAPTER
366 std::cerr << "PluginAdapterBase::vampGetMaxChannelCount(" << handle << ")" << std::endl;
367 #endif
368
299 return ((Plugin *)handle)->getMaxChannelCount(); 369 return ((Plugin *)handle)->getMaxChannelCount();
300 } 370 }
301 371
302 unsigned int 372 unsigned int
303 PluginAdapterBase::vampGetOutputCount(VampPluginHandle handle) 373 PluginAdapterBase::vampGetOutputCount(VampPluginHandle handle)
304 { 374 {
375 #ifdef DEBUG_PLUGIN_ADAPTER
376 std::cerr << "PluginAdapterBase::vampGetOutputCount(" << handle << ")" << std::endl;
377 #endif
378
305 PluginAdapterBase *adapter = lookupAdapter(handle); 379 PluginAdapterBase *adapter = lookupAdapter(handle);
306 380
307 // std::cerr << "vampGetOutputCount: handle " << handle << " -> adapter "<< adapter << std::endl; 381 // std::cerr << "vampGetOutputCount: handle " << handle << " -> adapter "<< adapter << std::endl;
308 382
309 if (!adapter) return 0; 383 if (!adapter) return 0;
312 386
313 VampOutputDescriptor * 387 VampOutputDescriptor *
314 PluginAdapterBase::vampGetOutputDescriptor(VampPluginHandle handle, 388 PluginAdapterBase::vampGetOutputDescriptor(VampPluginHandle handle,
315 unsigned int i) 389 unsigned int i)
316 { 390 {
391 #ifdef DEBUG_PLUGIN_ADAPTER
392 std::cerr << "PluginAdapterBase::vampGetOutputDescriptor(" << handle << ", " << i << ")" << std::endl;
393 #endif
394
317 PluginAdapterBase *adapter = lookupAdapter(handle); 395 PluginAdapterBase *adapter = lookupAdapter(handle);
318 396
319 // std::cerr << "vampGetOutputDescriptor: handle " << handle << " -> adapter "<< adapter << std::endl; 397 // std::cerr << "vampGetOutputDescriptor: handle " << handle << " -> adapter "<< adapter << std::endl;
320 398
321 if (!adapter) return 0; 399 if (!adapter) return 0;
323 } 401 }
324 402
325 void 403 void
326 PluginAdapterBase::vampReleaseOutputDescriptor(VampOutputDescriptor *desc) 404 PluginAdapterBase::vampReleaseOutputDescriptor(VampOutputDescriptor *desc)
327 { 405 {
406 #ifdef DEBUG_PLUGIN_ADAPTER
407 std::cerr << "PluginAdapterBase::vampReleaseOutputDescriptor(" << desc << ")" << std::endl;
408 #endif
409
328 if (desc->name) free((void *)desc->name); 410 if (desc->name) free((void *)desc->name);
329 if (desc->description) free((void *)desc->description); 411 if (desc->description) free((void *)desc->description);
330 if (desc->unit) free((void *)desc->unit); 412 if (desc->unit) free((void *)desc->unit);
331 for (unsigned int i = 0; i < desc->binCount; ++i) { 413 for (unsigned int i = 0; i < desc->binCount; ++i) {
332 free((void *)desc->binNames[i]); 414 free((void *)desc->binNames[i]);
339 PluginAdapterBase::vampProcess(VampPluginHandle handle, 421 PluginAdapterBase::vampProcess(VampPluginHandle handle,
340 float **inputBuffers, 422 float **inputBuffers,
341 int sec, 423 int sec,
342 int nsec) 424 int nsec)
343 { 425 {
426 #ifdef DEBUG_PLUGIN_ADAPTER
427 std::cerr << "PluginAdapterBase::vampProcess(" << handle << ", " << sec << ", " << nsec << ")" << std::endl;
428 #endif
429
344 PluginAdapterBase *adapter = lookupAdapter(handle); 430 PluginAdapterBase *adapter = lookupAdapter(handle);
345 if (!adapter) return 0; 431 if (!adapter) return 0;
346 return adapter->process((Plugin *)handle, 432 return adapter->process((Plugin *)handle,
347 inputBuffers, sec, nsec); 433 inputBuffers, sec, nsec);
348 } 434 }
349 435
350 VampFeatureList * 436 VampFeatureList *
351 PluginAdapterBase::vampGetRemainingFeatures(VampPluginHandle handle) 437 PluginAdapterBase::vampGetRemainingFeatures(VampPluginHandle handle)
352 { 438 {
439 #ifdef DEBUG_PLUGIN_ADAPTER
440 std::cerr << "PluginAdapterBase::vampGetRemainingFeatures(" << handle << ")" << std::endl;
441 #endif
442
353 PluginAdapterBase *adapter = lookupAdapter(handle); 443 PluginAdapterBase *adapter = lookupAdapter(handle);
354 if (!adapter) return 0; 444 if (!adapter) return 0;
355 return adapter->getRemainingFeatures((Plugin *)handle); 445 return adapter->getRemainingFeatures((Plugin *)handle);
356 } 446 }
357 447
358 void 448 void
359 PluginAdapterBase::vampReleaseFeatureSet(VampFeatureList *fs) 449 PluginAdapterBase::vampReleaseFeatureSet(VampFeatureList *fs)
360 { 450 {
451 #ifdef DEBUG_PLUGIN_ADAPTER
452 std::cerr << "PluginAdapterBase::vampReleaseFeatureSet" << std::endl;
453 #endif
361 } 454 }
362 455
363 void 456 void
364 PluginAdapterBase::cleanup(Plugin *plugin) 457 PluginAdapterBase::cleanup(Plugin *plugin)
365 { 458 {