Mercurial > hg > svcore
comparison plugin/LADSPAPluginFactory.cpp @ 689:573d45e9487b
Merge from debug-output branch
author | Chris Cannam |
---|---|
date | Tue, 14 Jun 2011 14:47:59 +0100 |
parents | 06f13a3b9e9e |
children | 1424aa29ae95 |
comparison
equal
deleted
inserted
replaced
688:be43b2fe68e8 | 689:573d45e9487b |
---|---|
225 else logmin = log10f(minimum); | 225 else logmin = log10f(minimum); |
226 if (maximum < thresh) logmax = -10; | 226 if (maximum < thresh) logmax = -10; |
227 else logmax = log10f(maximum); | 227 else logmax = log10f(maximum); |
228 } | 228 } |
229 | 229 |
230 // std::cerr << "LADSPAPluginFactory::getPortDefault: hint = " << d << std::endl; | 230 // DEBUG << "LADSPAPluginFactory::getPortDefault: hint = " << d << endl; |
231 | 231 |
232 if (!LADSPA_IS_HINT_HAS_DEFAULT(d)) { | 232 if (!LADSPA_IS_HINT_HAS_DEFAULT(d)) { |
233 | 233 |
234 deft = minimum; | 234 deft = minimum; |
235 | 235 |
347 descriptor); | 347 descriptor); |
348 | 348 |
349 m_instances.insert(instance); | 349 m_instances.insert(instance); |
350 | 350 |
351 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY | 351 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY |
352 std::cerr << "LADSPAPluginFactory::instantiatePlugin(" | 352 DEBUG << "LADSPAPluginFactory::instantiatePlugin(" |
353 << identifier.toStdString() << ": now have " << m_instances.size() << " instances" << std::endl; | 353 << identifier << ": now have " << m_instances.size() << " instances" << endl; |
354 #endif | 354 #endif |
355 | 355 |
356 return instance; | 356 return instance; |
357 } | 357 } |
358 | 358 |
382 ii != m_instances.end(); ++ii) { | 382 ii != m_instances.end(); ++ii) { |
383 QString itype, isoname, ilabel; | 383 QString itype, isoname, ilabel; |
384 PluginIdentifier::parseIdentifier((*ii)->getPluginIdentifier(), itype, isoname, ilabel); | 384 PluginIdentifier::parseIdentifier((*ii)->getPluginIdentifier(), itype, isoname, ilabel); |
385 if (isoname == soname) { | 385 if (isoname == soname) { |
386 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY | 386 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY |
387 std::cerr << "LADSPAPluginFactory::releasePlugin: dll " << soname.toStdString() << " is still in use for plugin " << ilabel.toStdString() << std::endl; | 387 DEBUG << "LADSPAPluginFactory::releasePlugin: dll " << soname << " is still in use for plugin " << ilabel << endl; |
388 #endif | 388 #endif |
389 stillInUse = true; | 389 stillInUse = true; |
390 break; | 390 break; |
391 } | 391 } |
392 } | 392 } |
393 | 393 |
394 if (!stillInUse) { | 394 if (!stillInUse) { |
395 if (soname != PluginIdentifier::BUILTIN_PLUGIN_SONAME) { | 395 if (soname != PluginIdentifier::BUILTIN_PLUGIN_SONAME) { |
396 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY | 396 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY |
397 std::cerr << "LADSPAPluginFactory::releasePlugin: dll " << soname.toStdString() << " no longer in use, unloading" << std::endl; | 397 DEBUG << "LADSPAPluginFactory::releasePlugin: dll " << soname << " no longer in use, unloading" << endl; |
398 #endif | 398 #endif |
399 unloadLibrary(soname); | 399 unloadLibrary(soname); |
400 } | 400 } |
401 } | 401 } |
402 | 402 |
403 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY | 403 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY |
404 std::cerr << "LADSPAPluginFactory::releasePlugin(" | 404 DEBUG << "LADSPAPluginFactory::releasePlugin(" |
405 << identifier.toStdString() << ": now have " << m_instances.size() << " instances" << std::endl; | 405 << identifier << ": now have " << m_instances.size() << " instances" << endl; |
406 #endif | 406 #endif |
407 } | 407 } |
408 | 408 |
409 const LADSPA_Descriptor * | 409 const LADSPA_Descriptor * |
410 LADSPAPluginFactory::getLADSPADescriptor(QString identifier) | 410 LADSPAPluginFactory::getLADSPADescriptor(QString identifier) |
413 PluginIdentifier::parseIdentifier(identifier, type, soname, label); | 413 PluginIdentifier::parseIdentifier(identifier, type, soname, label); |
414 | 414 |
415 if (m_libraryHandles.find(soname) == m_libraryHandles.end()) { | 415 if (m_libraryHandles.find(soname) == m_libraryHandles.end()) { |
416 loadLibrary(soname); | 416 loadLibrary(soname); |
417 if (m_libraryHandles.find(soname) == m_libraryHandles.end()) { | 417 if (m_libraryHandles.find(soname) == m_libraryHandles.end()) { |
418 std::cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: loadLibrary failed for " << soname.toStdString() << std::endl; | 418 std::cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: loadLibrary failed for " << soname << std::endl; |
419 return 0; | 419 return 0; |
420 } | 420 } |
421 } | 421 } |
422 | 422 |
423 void *libraryHandle = m_libraryHandles[soname]; | 423 void *libraryHandle = m_libraryHandles[soname]; |
424 | 424 |
425 LADSPA_Descriptor_Function fn = (LADSPA_Descriptor_Function) | 425 LADSPA_Descriptor_Function fn = (LADSPA_Descriptor_Function) |
426 DLSYM(libraryHandle, "ladspa_descriptor"); | 426 DLSYM(libraryHandle, "ladspa_descriptor"); |
427 | 427 |
428 if (!fn) { | 428 if (!fn) { |
429 std::cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: No descriptor function in library " << soname.toStdString() << std::endl; | 429 std::cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: No descriptor function in library " << soname << std::endl; |
430 return 0; | 430 return 0; |
431 } | 431 } |
432 | 432 |
433 const LADSPA_Descriptor *descriptor = 0; | 433 const LADSPA_Descriptor *descriptor = 0; |
434 | 434 |
436 while ((descriptor = fn(index))) { | 436 while ((descriptor = fn(index))) { |
437 if (descriptor->Label == label) return descriptor; | 437 if (descriptor->Label == label) return descriptor; |
438 ++index; | 438 ++index; |
439 } | 439 } |
440 | 440 |
441 std::cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: No such plugin as " << label.toStdString() << " in library " << soname.toStdString() << std::endl; | 441 std::cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: No such plugin as " << label << " in library " << soname << std::endl; |
442 | 442 |
443 return 0; | 443 return 0; |
444 } | 444 } |
445 | 445 |
446 void | 446 void |
447 LADSPAPluginFactory::loadLibrary(QString soName) | 447 LADSPAPluginFactory::loadLibrary(QString soName) |
448 { | 448 { |
449 void *libraryHandle = DLOPEN(soName, RTLD_NOW); | 449 void *libraryHandle = DLOPEN(soName, RTLD_NOW); |
450 if (libraryHandle) { | 450 if (libraryHandle) { |
451 m_libraryHandles[soName] = libraryHandle; | 451 m_libraryHandles[soName] = libraryHandle; |
452 std::cerr << "LADSPAPluginFactory::loadLibrary: Loaded library \"" << soName.toStdString() << "\"" << std::endl; | 452 DEBUG << "LADSPAPluginFactory::loadLibrary: Loaded library \"" << soName << "\"" << endl; |
453 return; | 453 return; |
454 } | 454 } |
455 | 455 |
456 if (QFileInfo(soName).exists()) { | 456 if (QFileInfo(soName).exists()) { |
457 DLERROR(); | 457 DLERROR(); |
458 std::cerr << "LADSPAPluginFactory::loadLibrary: Library \"" << soName.toStdString() << "\" exists, but failed to load it" << std::endl; | 458 std::cerr << "LADSPAPluginFactory::loadLibrary: Library \"" << soName << "\" exists, but failed to load it" << std::endl; |
459 return; | 459 return; |
460 } | 460 } |
461 | 461 |
462 std::vector<QString> pathList = getPluginPath(); | 462 std::vector<QString> pathList = getPluginPath(); |
463 | 463 |
466 | 466 |
467 for (std::vector<QString>::iterator i = pathList.begin(); | 467 for (std::vector<QString>::iterator i = pathList.begin(); |
468 i != pathList.end(); ++i) { | 468 i != pathList.end(); ++i) { |
469 | 469 |
470 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY | 470 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY |
471 std::cerr << "Looking at: " << (*i).toStdString() << std::endl; | 471 DEBUG << "Looking at: " << (*i) << endl; |
472 #endif | 472 #endif |
473 | 473 |
474 QDir dir(*i, PLUGIN_GLOB, | 474 QDir dir(*i, PLUGIN_GLOB, |
475 QDir::Name | QDir::IgnoreCase, | 475 QDir::Name | QDir::IgnoreCase, |
476 QDir::Files | QDir::Readable); | 476 QDir::Files | QDir::Readable); |
477 | 477 |
478 if (QFileInfo(dir.filePath(fileName)).exists()) { | 478 if (QFileInfo(dir.filePath(fileName)).exists()) { |
479 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY | 479 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY |
480 std::cerr << "Loading: " << fileName.toStdString() << std::endl; | 480 std::cerr << "Loading: " << fileName << std::endl; |
481 #endif | 481 #endif |
482 libraryHandle = DLOPEN(dir.filePath(fileName), RTLD_NOW); | 482 libraryHandle = DLOPEN(dir.filePath(fileName), RTLD_NOW); |
483 if (libraryHandle) { | 483 if (libraryHandle) { |
484 m_libraryHandles[soName] = libraryHandle; | 484 m_libraryHandles[soName] = libraryHandle; |
485 return; | 485 return; |
488 | 488 |
489 for (unsigned int j = 0; j < dir.count(); ++j) { | 489 for (unsigned int j = 0; j < dir.count(); ++j) { |
490 QString file = dir.filePath(dir[j]); | 490 QString file = dir.filePath(dir[j]); |
491 if (QFileInfo(file).baseName() == base) { | 491 if (QFileInfo(file).baseName() == base) { |
492 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY | 492 #ifdef DEBUG_LADSPA_PLUGIN_FACTORY |
493 std::cerr << "Loading: " << file.toStdString() << std::endl; | 493 std::cerr << "Loading: " << file << std::endl; |
494 #endif | 494 #endif |
495 libraryHandle = DLOPEN(file, RTLD_NOW); | 495 libraryHandle = DLOPEN(file, RTLD_NOW); |
496 if (libraryHandle) { | 496 if (libraryHandle) { |
497 m_libraryHandles[soName] = libraryHandle; | 497 m_libraryHandles[soName] = libraryHandle; |
498 return; | 498 return; |
499 } | 499 } |
500 } | 500 } |
501 } | 501 } |
502 } | 502 } |
503 | 503 |
504 std::cerr << "LADSPAPluginFactory::loadLibrary: Failed to locate plugin library \"" << soName.toStdString() << "\"" << std::endl; | 504 std::cerr << "LADSPAPluginFactory::loadLibrary: Failed to locate plugin library \"" << soName << "\"" << std::endl; |
505 } | 505 } |
506 | 506 |
507 void | 507 void |
508 LADSPAPluginFactory::unloadLibrary(QString soName) | 508 LADSPAPluginFactory::unloadLibrary(QString soName) |
509 { | 509 { |
510 LibraryHandleMap::iterator li = m_libraryHandles.find(soName); | 510 LibraryHandleMap::iterator li = m_libraryHandles.find(soName); |
511 if (li != m_libraryHandles.end()) { | 511 if (li != m_libraryHandles.end()) { |
512 // std::cerr << "unloading " << soname.toStdString() << std::endl; | 512 // DEBUG << "unloading " << soname << endl; |
513 DLCLOSE(m_libraryHandles[soName]); | 513 DLCLOSE(m_libraryHandles[soName]); |
514 m_libraryHandles.erase(li); | 514 m_libraryHandles.erase(li); |
515 } | 515 } |
516 } | 516 } |
517 | 517 |
631 { | 631 { |
632 Profiler profiler("LADSPAPluginFactory::discoverPlugins"); | 632 Profiler profiler("LADSPAPluginFactory::discoverPlugins"); |
633 | 633 |
634 std::vector<QString> pathList = getPluginPath(); | 634 std::vector<QString> pathList = getPluginPath(); |
635 | 635 |
636 // std::cerr << "LADSPAPluginFactory::discoverPlugins - " | 636 // DEBUG << "LADSPAPluginFactory::discoverPlugins - " |
637 // << "discovering plugins; path is "; | 637 // << "discovering plugins; path is "; |
638 // for (std::vector<QString>::iterator i = pathList.begin(); | 638 // for (std::vector<QString>::iterator i = pathList.begin(); |
639 // i != pathList.end(); ++i) { | 639 // i != pathList.end(); ++i) { |
640 // std::cerr << "[" << i->toStdString() << "] "; | 640 // DEBUG << "[" << i-<< "] "; |
641 // } | 641 // } |
642 // std::cerr << std::endl; | 642 // DEBUG << endl; |
643 | 643 |
644 #ifdef HAVE_LRDF | 644 #ifdef HAVE_LRDF |
645 // read the description files | 645 // read the description files |
646 // | 646 // |
647 QString baseUri; | 647 QString baseUri; |
682 { | 682 { |
683 void *libraryHandle = DLOPEN(soname, RTLD_LAZY); | 683 void *libraryHandle = DLOPEN(soname, RTLD_LAZY); |
684 | 684 |
685 if (!libraryHandle) { | 685 if (!libraryHandle) { |
686 std::cerr << "WARNING: LADSPAPluginFactory::discoverPlugins: couldn't load plugin library " | 686 std::cerr << "WARNING: LADSPAPluginFactory::discoverPlugins: couldn't load plugin library " |
687 << soname.toStdString() << " - " << DLERROR() << std::endl; | 687 << soname << " - " << DLERROR() << std::endl; |
688 return; | 688 return; |
689 } | 689 } |
690 | 690 |
691 LADSPA_Descriptor_Function fn = (LADSPA_Descriptor_Function) | 691 LADSPA_Descriptor_Function fn = (LADSPA_Descriptor_Function) |
692 DLSYM(libraryHandle, "ladspa_descriptor"); | 692 DLSYM(libraryHandle, "ladspa_descriptor"); |
693 | 693 |
694 if (!fn) { | 694 if (!fn) { |
695 std::cerr << "WARNING: LADSPAPluginFactory::discoverPlugins: No descriptor function in " << soname.toStdString() << std::endl; | 695 std::cerr << "WARNING: LADSPAPluginFactory::discoverPlugins: No descriptor function in " << soname << std::endl; |
696 return; | 696 return; |
697 } | 697 } |
698 | 698 |
699 const LADSPA_Descriptor *descriptor = 0; | 699 const LADSPA_Descriptor *descriptor = 0; |
700 | 700 |
720 char *def_uri = 0; | 720 char *def_uri = 0; |
721 lrdf_defaults *defs = 0; | 721 lrdf_defaults *defs = 0; |
722 | 722 |
723 if (m_lrdfTaxonomy[descriptor->UniqueID] != "") { | 723 if (m_lrdfTaxonomy[descriptor->UniqueID] != "") { |
724 m_taxonomy[identifier] = m_lrdfTaxonomy[descriptor->UniqueID]; | 724 m_taxonomy[identifier] = m_lrdfTaxonomy[descriptor->UniqueID]; |
725 // std::cerr << "set id \"" << identifier.toStdString() << "\" to cat \"" << m_taxonomy[identifier].toStdString() << "\" from LRDF" << std::endl; | 725 // std::cerr << "set id \"" << identifier << "\" to cat \"" << m_taxonomy[identifier] << "\" from LRDF" << std::endl; |
726 // std::cout << identifier.toStdString() << "::" << m_taxonomy[identifier].toStdString() << std::endl; | 726 // std::cout << identifier << "::" << m_taxonomy[identifier] << std::endl; |
727 } | 727 } |
728 | 728 |
729 QString category = m_taxonomy[identifier]; | 729 QString category = m_taxonomy[identifier]; |
730 | 730 |
731 if (category == "" && descriptor->Name != 0) { | 731 if (category == "" && descriptor->Name != 0) { |
816 if (pluginPath[i].contains("/lib/")) { | 816 if (pluginPath[i].contains("/lib/")) { |
817 QString p(pluginPath[i]); | 817 QString p(pluginPath[i]); |
818 path.push_back(p); | 818 path.push_back(p); |
819 p.replace("/lib/", "/share/"); | 819 p.replace("/lib/", "/share/"); |
820 path.push_back(p); | 820 path.push_back(p); |
821 // std::cerr << "LADSPAPluginFactory::generateFallbackCategories: path element " << p.toStdString() << std::endl; | 821 // DEBUG << "LADSPAPluginFactory::generateFallbackCategories: path element " << p << endl; |
822 } | 822 } |
823 path.push_back(pluginPath[i]); | 823 path.push_back(pluginPath[i]); |
824 // std::cerr << "LADSPAPluginFactory::generateFallbackCategories: path element " << pluginPath[i].toStdString() << std::endl; | 824 // DEBUG << "LADSPAPluginFactory::generateFallbackCategories: path element " << pluginPath[i] << endl; |
825 } | 825 } |
826 | 826 |
827 for (size_t i = 0; i < path.size(); ++i) { | 827 for (size_t i = 0; i < path.size(); ++i) { |
828 | 828 |
829 QDir dir(path[i], "*.cat"); | 829 QDir dir(path[i], "*.cat"); |
830 | 830 |
831 // std::cerr << "LADSPAPluginFactory::generateFallbackCategories: directory " << path[i].toStdString() << " has " << dir.count() << " .cat files" << std::endl; | 831 // DEBUG << "LADSPAPluginFactory::generateFallbackCategories: directory " << path[i] << " has " << dir.count() << " .cat files" << endl; |
832 for (unsigned int j = 0; j < dir.count(); ++j) { | 832 for (unsigned int j = 0; j < dir.count(); ++j) { |
833 | 833 |
834 QFile file(path[i] + "/" + dir[j]); | 834 QFile file(path[i] + "/" + dir[j]); |
835 | 835 |
836 // std::cerr << "LADSPAPluginFactory::generateFallbackCategories: about to open " << (path[i].toStdString() + "/" + dir[j].toStdString()) << std::endl; | 836 // DEBUG << "LADSPAPluginFactory::generateFallbackCategories: about to open " << (path[i]+ "/" + dir[j]) << endl; |
837 | 837 |
838 if (file.open(QIODevice::ReadOnly)) { | 838 if (file.open(QIODevice::ReadOnly)) { |
839 // std::cerr << "...opened" << std::endl; | 839 // std::cerr << "...opened" << std::endl; |
840 QTextStream stream(&file); | 840 QTextStream stream(&file); |
841 QString line; | 841 QString line; |
842 | 842 |
843 while (!stream.atEnd()) { | 843 while (!stream.atEnd()) { |
844 line = stream.readLine(); | 844 line = stream.readLine(); |
845 // std::cerr << "line is: \"" << line.toStdString() << "\"" << std::endl; | 845 // std::cerr << "line is: \"" << line << "\"" << std::endl; |
846 QString id = PluginIdentifier::canonicalise | 846 QString id = PluginIdentifier::canonicalise |
847 (line.section("::", 0, 0)); | 847 (line.section("::", 0, 0)); |
848 QString cat = line.section("::", 1, 1); | 848 QString cat = line.section("::", 1, 1); |
849 m_taxonomy[id] = cat; | 849 m_taxonomy[id] = cat; |
850 // std::cerr << "set id \"" << id.toStdString() << "\" to cat \"" << cat.toStdString() << "\"" << std::endl; | 850 // std::cerr << "set id \"" << id << "\" to cat \"" << cat << "\"" << std::endl; |
851 } | 851 } |
852 } | 852 } |
853 } | 853 } |
854 } | 854 } |
855 } | 855 } |