Browse Source

Continue previous commit; Use LV2 as cached plugins

tags/1.9.5
falkTX 10 years ago
parent
commit
2dc9ee8f83
3 changed files with 89 additions and 195 deletions
  1. +2
    -1
      source/backend/CarlaHostCommon.cpp
  2. +7
    -8
      source/carla_backend.py
  3. +80
    -186
      source/carla_database.py

+ 2
- 1
source/backend/CarlaHostCommon.cpp View File

@@ -612,9 +612,10 @@ const CarlaCachedPluginInfo* carla_get_cached_plugin_info(PluginType ptype, uint
return &info;
}

case CB::PLUGIN_AU:
case CB::PLUGIN_AU: {
// TODO
return nullptr;
}

default:
return nullptr;


+ 7
- 8
source/carla_backend.py View File

@@ -1402,10 +1402,9 @@ class CarlaHostMeta(QObject):
def get_cached_plugin_count(self, ptype, pluginPath):
raise NotImplementedError

# Get information about an internal plugin.
# @param index Internal plugin Id
# Get information about a cached plugin.
@abstractmethod
def get_cached_plugin_info(self, index):
def get_cached_plugin_info(self, ptype, index):
raise NotImplementedError

# Initialize the engine.
@@ -2042,7 +2041,7 @@ class CarlaHostNull(CarlaHostMeta):
def get_cached_plugin_count(self, ptype, pluginPath):
return 0

def get_cached_plugin_info(self, index):
def get_cached_plugin_info(self, ptype, index):
return PyCarlaCachedPluginInfo

def engine_init(self, driverName, clientName):
@@ -2330,7 +2329,7 @@ class CarlaHostDLL(CarlaHostMeta):
self.lib.carla_get_cached_plugin_count.argtypes = [c_enum, c_char_p]
self.lib.carla_get_cached_plugin_count.restype = c_uint

self.lib.carla_get_cached_plugin_info.argtypes = [c_uint]
self.lib.carla_get_cached_plugin_info.argtypes = [c_enum, c_uint]
self.lib.carla_get_cached_plugin_info.restype = POINTER(CarlaCachedPluginInfo)

self.lib.carla_engine_init.argtypes = [c_char_p, c_char_p]
@@ -2602,8 +2601,8 @@ class CarlaHostDLL(CarlaHostMeta):
def get_cached_plugin_count(self, ptype, pluginPath):
return int(self.lib.carla_get_cached_plugin_count(ptype, pluginPath.encode("utf-8")))

def get_cached_plugin_info(self, index):
return structToDict(self.lib.carla_get_cached_plugin_info(index).contents)
def get_cached_plugin_info(self, ptype, index):
return structToDict(self.lib.carla_get_cached_plugin_info(ptype, index).contents)

def engine_init(self, driverName, clientName):
return bool(self.lib.carla_engine_init(driverName.encode("utf-8"), clientName.encode("utf-8")))
@@ -2955,7 +2954,7 @@ class CarlaHostPlugin(CarlaHostMeta):
def get_cached_plugin_count(self, ptype, pluginPath):
return 0

def get_cached_plugin_info(self, index):
def get_cached_plugin_info(self, ptype, index):
return PyCarlaCachedPluginInfo

def set_engine_callback(self, func):


+ 80
- 186
source/carla_database.py View File

@@ -134,7 +134,7 @@ def findFilenames(filePath, stype):
# ------------------------------------------------------------------------------------------------------------
# Plugin Query

PLUGIN_QUERY_API_VERSION = 4
PLUGIN_QUERY_API_VERSION = 5

PyPluginInfo = {
'API': PLUGIN_QUERY_API_VERSION,
@@ -285,12 +285,12 @@ def killDiscovery():
if gDiscoveryProcess is not None:
gDiscoveryProcess.kill()

def checkPluginInternal(desc):
def checkPluginCached(desc, ptype):
plugins = []

pinfo = deepcopy(PyPluginInfo)
pinfo['build'] = BINARY_NATIVE
pinfo['type'] = PLUGIN_INTERNAL
pinfo['type'] = ptype
pinfo['hints'] = desc['hints']
pinfo['name'] = desc['name']
pinfo['label'] = desc['label']
@@ -356,10 +356,8 @@ class SearchPluginsThread(QThread):

self.fCheckLADSPA = False
self.fCheckDSSI = False
self.fCheckLV2 = False
self.fCheckVST = False
self.fCheckVST3 = False
self.fCheckAU = False
self.fCheckGIG = False
self.fCheckSF2 = False
self.fCheckSFZ = False
@@ -381,10 +379,8 @@ class SearchPluginsThread(QThread):

self.fLadspaPlugins = []
self.fDssiPlugins = []
self.fLv2Plugins = []
self.fVstPlugins = []
self.fVst3Plugins = []
self.fAuPlugins = []
self.fKitPlugins = []

# -------------------------------------------------------------
@@ -399,13 +395,11 @@ class SearchPluginsThread(QThread):
self.fCheckWin32 = win32
self.fCheckWin64 = win64

def setSearchPluginTypes(self, ladspa, dssi, lv2, vst, vst3, au, gig, sf2, sfz):
def setSearchPluginTypes(self, ladspa, dssi, vst, vst3, gig, sf2, sfz):
self.fCheckLADSPA = ladspa
self.fCheckDSSI = dssi
self.fCheckLV2 = lv2
self.fCheckVST = vst
self.fCheckVST3 = vst3
self.fCheckAU = au and MACOS
self.fCheckGIG = gig
self.fCheckSF2 = sf2
self.fCheckSFZ = sfz
@@ -422,10 +416,8 @@ class SearchPluginsThread(QThread):

if self.fCheckLADSPA: pluginCount += 1
if self.fCheckDSSI: pluginCount += 1
if self.fCheckLV2: pluginCount += 1
if self.fCheckVST: pluginCount += 1
if self.fCheckVST3: pluginCount += 1
if self.fCheckAU: pluginCount += 1

if self.fCheckNative:
self.fCurCount += pluginCount
@@ -442,13 +434,9 @@ class SearchPluginsThread(QThread):

if self.fCheckWin32:
self.fCurCount += pluginCount
if self.fCheckAU:
self.fCurCount -= 1

if self.fCheckWin64:
self.fCurCount += pluginCount
if self.fCheckAU:
self.fCurCount -= 1

if self.fCheckNative and self.fToolNative:
if self.fCheckGIG: self.fCurCount += 1
@@ -570,39 +558,6 @@ class SearchPluginsThread(QThread):

if not self.fContinueChecking: return

if self.fCheckLV2:
if self.fCheckNative:
self._checkLV2(self.fToolNative)
settingsDB.setValue("Plugins/LV2_native", self.fLv2Plugins)

if not self.fContinueChecking: return

if self.fCheckPosix32:
self._checkLV2(os.path.join(self.fPathBinaries, "carla-discovery-posix32"))
settingsDB.setValue("Plugins/LV2_posix32", self.fLv2Plugins)

if not self.fContinueChecking: return

if self.fCheckPosix64:
self._checkLV2(os.path.join(self.fPathBinaries, "carla-discovery-posix64"))
settingsDB.setValue("Plugins/LV2_posix64", self.fLv2Plugins)

if not self.fContinueChecking: return

if self.fCheckWin32:
self._checkLV2(os.path.join(self.fPathBinaries, "carla-discovery-win32.exe"), not WINDOWS)
settingsDB.setValue("Plugins/LV2_win32", self.fLv2Plugins)

if not self.fContinueChecking: return

if self.fCheckWin64:
self._checkLV2(os.path.join(self.fPathBinaries, "carla-discovery-win64.exe"), not WINDOWS)
settingsDB.setValue("Plugins/LV2_win64", self.fLv2Plugins)

settingsDB.sync()

if not self.fContinueChecking: return

if self.fCheckVST:
if self.fCheckNative:
self._checkVST(OS, self.fToolNative)
@@ -669,27 +624,6 @@ class SearchPluginsThread(QThread):

if not self.fContinueChecking: return

if self.fCheckAU:
if self.fCheckNative:
self._checkAU(self.fToolNative)
settingsDB.setValue("Plugins/AU_native", self.fAuPlugins)

if not self.fContinueChecking: return

if self.fCheckPosix32:
self._checkAU(os.path.join(self.fPathBinaries, "carla-discovery-posix32"))
settingsDB.setValue("Plugins/AU_posix32", self.fAuPlugins)

if not self.fContinueChecking: return

if self.fCheckPosix64:
self._checkAU(os.path.join(self.fPathBinaries, "carla-discovery-posix64"))
settingsDB.setValue("Plugins/AU_posix64", self.fAuPlugins)

settingsDB.sync()

if not self.fContinueChecking: return

if self.fCheckGIG:
settings = QSettings("falkTX", "Carla2")
GIG_PATH = toList(settings.value(CARLA_KEY_PATHS_GIG, CARLA_DEFAULT_GIG_PATH))
@@ -788,40 +722,6 @@ class SearchPluginsThread(QThread):

self.fLastCheckValue += self.fCurPercentValue

def _checkLV2(self, tool, isWine=False):
lv2Bundles = []
self.fLv2Plugins = []

self._pluginLook(self.fLastCheckValue, "LV2 bundles...")

settings = QSettings("falkTX", "Carla2")
LV2_PATH = toList(settings.value(CARLA_KEY_PATHS_LV2, CARLA_DEFAULT_LV2_PATH))
del settings

for iPATH in LV2_PATH:
bundles = findLV2Bundles(iPATH)
for bundle in bundles:
if bundle not in lv2Bundles:
lv2Bundles.append(bundle)

lv2Bundles.sort()

if not self.fContinueChecking: return

for i in range(len(lv2Bundles)):
lv2 = lv2Bundles[i]
percent = ( float(i) / len(lv2Bundles) ) * self.fCurPercentValue
self._pluginLook(self.fLastCheckValue + percent, lv2)

plugins = checkPluginLV2(lv2, tool, isWine)
if plugins:
self.fLv2Plugins.append(plugins)
self.fSomethingChanged = True

if not self.fContinueChecking: break

self.fLastCheckValue += self.fCurPercentValue

def _checkVST(self, OS, tool, isWine=False):
vstBinaries = []
self.fVstPlugins = []
@@ -902,41 +802,6 @@ class SearchPluginsThread(QThread):

self.fLastCheckValue += self.fCurPercentValue

def _checkAU(self, tool):
auBinaries = []
self.fAuPlugins = []

# FIXME - this probably uses bundles
self._pluginLook(self.fLastCheckValue, "AU plugins...")

settings = QSettings("falkTX", "Carla2")
AU_PATH = toList(settings.value(CARLA_KEY_PATHS_AU, CARLA_DEFAULT_AU_PATH))
del settings

for iPATH in AU_PATH:
binaries = findBinaries(iPATH, "MACOS")
for binary in binaries:
if binary not in auBinaries:
auBinaries.append(binary)

auBinaries.sort()

if not self.fContinueChecking: return

for i in range(len(auBinaries)):
au = auBinaries[i]
percent = ( float(i) / len(auBinaries) ) * self.fCurPercentValue
self._pluginLook(self.fLastCheckValue + percent, au)

plugins = checkPluginAU(au, tool)
if plugins:
self.fAuPlugins.append(plugins)
self.fSomethingChanged = True

if not self.fContinueChecking: break

self.fLastCheckValue += self.fCurPercentValue

def _checkKIT(self, kitPATH, kitExtension):
kitFiles = []
self.fKitPlugins = []
@@ -1088,13 +953,8 @@ class PluginRefreshW(QDialog):
if not hasNonNative:
self.ui.ch_ladspa.setEnabled(False)
self.ui.ch_dssi.setEnabled(False)
self.ui.ch_lv2.setEnabled(False)
self.ui.ch_vst.setEnabled(False)
self.ui.ch_vst3.setEnabled(False)
self.ui.ch_au.setEnabled(False)

if not MACOS:
self.ui.ch_au.setVisible(False)

# ----------------------------------------------------------------------------------------------------
# Load settings
@@ -1114,10 +974,8 @@ class PluginRefreshW(QDialog):
self.ui.ch_win64.clicked.connect(self.slot_checkTools)
self.ui.ch_ladspa.clicked.connect(self.slot_checkTools)
self.ui.ch_dssi.clicked.connect(self.slot_checkTools)
self.ui.ch_lv2.clicked.connect(self.slot_checkTools)
self.ui.ch_vst.clicked.connect(self.slot_checkTools)
self.ui.ch_vst3.clicked.connect(self.slot_checkTools)
self.ui.ch_au.clicked.connect(self.slot_checkTools)
self.ui.ch_gig.clicked.connect(self.slot_checkTools)
self.ui.ch_sf2.clicked.connect(self.slot_checkTools)
self.ui.ch_sfz.clicked.connect(self.slot_checkTools)
@@ -1135,10 +993,8 @@ class PluginRefreshW(QDialog):
settings = QSettings("falkTX", "CarlaRefresh2")
self.ui.ch_ladspa.setChecked(settings.value("PluginDatabase/SearchLADSPA", True, type=bool) and self.ui.ch_ladspa.isEnabled())
self.ui.ch_dssi.setChecked(settings.value("PluginDatabase/SearchDSSI", True, type=bool) and self.ui.ch_dssi.isEnabled())
self.ui.ch_lv2.setChecked(settings.value("PluginDatabase/SearchLV2", True, type=bool) and self.ui.ch_lv2.isEnabled())
self.ui.ch_vst.setChecked(settings.value("PluginDatabase/SearchVST", True, type=bool) and self.ui.ch_vst.isEnabled())
self.ui.ch_vst3.setChecked(settings.value("PluginDatabase/SearchVST3", (MACOS or WINDOWS), type=bool) and self.ui.ch_vst3.isEnabled())
self.ui.ch_au.setChecked(settings.value("PluginDatabase/SearchAU", True, type=bool) and self.ui.ch_au.isEnabled())
self.ui.ch_gig.setChecked(settings.value("PluginDatabase/SearchGIG", False, type=bool) and self.ui.ch_gig.isEnabled())
self.ui.ch_sf2.setChecked(settings.value("PluginDatabase/SearchSF2", False, type=bool) and self.ui.ch_sf2.isEnabled())
self.ui.ch_sfz.setChecked(settings.value("PluginDatabase/SearchSFZ", False, type=bool) and self.ui.ch_sfz.isEnabled())
@@ -1156,10 +1012,8 @@ class PluginRefreshW(QDialog):
settings = QSettings("falkTX", "CarlaRefresh2")
settings.setValue("PluginDatabase/SearchLADSPA", self.ui.ch_ladspa.isChecked())
settings.setValue("PluginDatabase/SearchDSSI", self.ui.ch_dssi.isChecked())
settings.setValue("PluginDatabase/SearchLV2", self.ui.ch_lv2.isChecked())
settings.setValue("PluginDatabase/SearchVST", self.ui.ch_vst.isChecked())
settings.setValue("PluginDatabase/SearchVST3", self.ui.ch_vst3.isChecked())
settings.setValue("PluginDatabase/SearchAU", self.ui.ch_au.isChecked())
settings.setValue("PluginDatabase/SearchGIG", self.ui.ch_gig.isChecked())
settings.setValue("PluginDatabase/SearchSF2", self.ui.ch_sf2.isChecked())
settings.setValue("PluginDatabase/SearchSFZ", self.ui.ch_sfz.isChecked())
@@ -1192,13 +1046,12 @@ class PluginRefreshW(QDialog):
self.ui.ch_posix32.isChecked(), self.ui.ch_posix64.isChecked(),
self.ui.ch_win32.isChecked(), self.ui.ch_win64.isChecked())

ladspa, dssi, lv2, vst, vst3, au, gig, sf2, sfz = (self.ui.ch_ladspa.isChecked(), self.ui.ch_dssi.isChecked(),
self.ui.ch_lv2.isChecked(), self.ui.ch_vst.isChecked(),
self.ui.ch_vst3.isChecked(), self.ui.ch_au.isChecked(),
self.ui.ch_gig.isChecked(), self.ui.ch_sf2.isChecked(), self.ui.ch_sfz.isChecked())
ladspa, dssi, vst, vst3, gig, sf2, sfz = (self.ui.ch_ladspa.isChecked(), self.ui.ch_dssi.isChecked(),
self.ui.ch_vst.isChecked(), self.ui.ch_vst3.isChecked(),
self.ui.ch_gig.isChecked(), self.ui.ch_sf2.isChecked(), self.ui.ch_sfz.isChecked())

self.fThread.setSearchBinaryTypes(native, posix32, posix64, win32, win64)
self.fThread.setSearchPluginTypes(ladspa, dssi, lv2, vst, vst3, au, gig, sf2, sfz)
self.fThread.setSearchPluginTypes(ladspa, dssi, vst, vst3, gig, sf2, sfz)
self.fThread.start()

# --------------------------------------------------------------------------------------------------------
@@ -1212,8 +1065,8 @@ class PluginRefreshW(QDialog):
@pyqtSlot()
def slot_checkTools(self):
enabled1 = bool(self.ui.ch_native.isChecked() or self.ui.ch_posix32.isChecked() or self.ui.ch_posix64.isChecked() or self.ui.ch_win32.isChecked() or self.ui.ch_win64.isChecked())
enabled2 = bool(self.ui.ch_ladspa.isChecked() or self.ui.ch_dssi.isChecked() or self.ui.ch_lv2.isChecked() or self.ui.ch_vst.isChecked() or self.ui.ch_vst3.isChecked() or
self.ui.ch_au.isChecked() or self.ui.ch_gig.isChecked() or self.ui.ch_sf2.isChecked() or self.ui.ch_sfz.isChecked())
enabled2 = bool(self.ui.ch_ladspa.isChecked() or self.ui.ch_dssi.isChecked() or self.ui.ch_vst.isChecked() or self.ui.ch_vst3.isChecked() or
self.ui.ch_gig.isChecked() or self.ui.ch_sf2.isChecked() or self.ui.ch_sfz.isChecked())
self.ui.b_start.setEnabled(enabled1 and enabled2)

# --------------------------------------------------------------------------------------------------------
@@ -1533,7 +1386,7 @@ class PluginDatabaseW(QDialog):
# --------------------------------------------------------------------------------------------------------

def _addPluginToTable(self, plugin, ptype):
if plugin['API'] != PLUGIN_QUERY_API_VERSION and not ptype == self.tr("Internal"):
if plugin['API'] != PLUGIN_QUERY_API_VERSION and ptype == self.tr("Internal"):
return

index = self.fLastTableIndex
@@ -1602,33 +1455,91 @@ class PluginDatabaseW(QDialog):
kitCount = 0

# ----------------------------------------------------------------------------------------------------
# Internal
# Cached plugins

internalPlugins = toList(settingsDB.value("Plugins/Internal", []))

for plugins in internalPlugins:
internalCount += len(plugins)

canRefreshInternals = not self.host.isPlugin
lv2Plugins = toList(settingsDB.value("Plugins/LV2", []))

for plugins in lv2Plugins:
lv2Count += len(plugins)

auPlugins = toList(settingsDB.value("Plugins/AU", []))

for plugins in auPlugins:
auCount += len(plugins)

if canRefreshInternals and internalCount != self.host.get_cached_plugin_count(PLUGIN_INTERNAL, ""):
internalCount = self.host.get_cached_plugin_count(PLUGIN_INTERNAL, "")
internalPlugins = []
# Can't update cached plugins in carla-plugin
if not self.host.isPlugin:
settings = QSettings("falkTX", "Carla2")
LV2_PATH = splitter.join(toList(settings.value(CARLA_KEY_PATHS_LV2, CARLA_DEFAULT_LV2_PATH)))
AU_PATH = splitter.join(toList(settings.value(CARLA_KEY_PATHS_AU, CARLA_DEFAULT_AU_PATH)))
del settings

internalCountNew = self.host.get_cached_plugin_count(PLUGIN_INTERNAL, "")
lv2CountNew = self.host.get_cached_plugin_count(PLUGIN_LV2, LV2_PATH)
auCountNew = self.host.get_cached_plugin_count(PLUGIN_AU, AU_PATH)

if internalCountNew != internalCount or (len(internalPlugins) > 0 and
len(internalPlugins[0]) > 0 and
internalPlugins[0][0]['API'] != PLUGIN_QUERY_API_VERSION):
internalPlugins = []

for i in range(internalCountNew):
descInfo = self.host.get_cached_plugin_info(PLUGIN_INTERNAL, i)
plugins = checkPluginCached(descInfo, PLUGIN_INTERNAL)

if plugins:
internalPlugins.append(plugins)

settingsDB.setValue("Plugins/Internal", internalPlugins)

for i in range(internalCount):
descInfo = self.host.get_cached_plugin_info(PLUGIN_INTERNAL, i)
plugins = checkPluginInternal(descInfo)
if lv2CountNew != lv2Count or (len(lv2Plugins) > 0 and
len(lv2Plugins[0]) > 0 and
lv2Plugins[0][0]['API'] != PLUGIN_QUERY_API_VERSION):
lv2Plugins = []

if plugins:
internalPlugins.append(plugins)
for i in range(lv2CountNew):
descInfo = self.host.get_cached_plugin_info(PLUGIN_LV2, i)
plugins = checkPluginCached(descInfo, PLUGIN_LV2)

settingsDB.setValue("Plugins/Internal", internalPlugins)
if plugins:
lv2Plugins.append(plugins)

settingsDB.setValue("Plugins/LV2", lv2Plugins)

if auCountNew != auCount or (len(auPlugins) > 0 and
len(auPlugins[0]) > 0 and
auPlugins[0][0]['API'] != PLUGIN_QUERY_API_VERSION):
auPlugins = []

for i in range(auCountNew):
descInfo = self.host.get_cached_plugin_info(PLUGIN_AU, i)
plugins = checkPluginCached(descInfo, PLUGIN_AU)

if plugins:
auPlugins.append(plugins)

settingsDB.setValue("Plugins/AU", auPlugins)

for plugins in internalPlugins:
for plugin in plugins:
self._addPluginToTable(plugin, self.tr("Internal"))

for plugins in lv2Plugins:
for plugin in plugins:
self._addPluginToTable(plugin, self.tr("LV2"))

for plugins in auPlugins:
for plugin in plugins:
self._addPluginToTable(plugin, self.tr("AU"))

del internalPlugins
del lv2Plugins
del auPlugins

# ----------------------------------------------------------------------------------------------------
# LADSPA
@@ -1664,23 +1575,6 @@ class PluginDatabaseW(QDialog):

del dssiPlugins

# ----------------------------------------------------------------------------------------------------
# LV2

lv2Plugins = []
lv2Plugins += toList(settingsDB.value("Plugins/LV2_native", []))
lv2Plugins += toList(settingsDB.value("Plugins/LV2_posix32", []))
lv2Plugins += toList(settingsDB.value("Plugins/LV2_posix64", []))
lv2Plugins += toList(settingsDB.value("Plugins/LV2_win32", []))
lv2Plugins += toList(settingsDB.value("Plugins/LV2_win64", []))

for plugins in lv2Plugins:
for plugin in plugins:
self._addPluginToTable(plugin, "LV2")
lv2Count += 1

del lv2Plugins

# ----------------------------------------------------------------------------------------------------
# VST



Loading…
Cancel
Save