diff --git a/c++/carla-discovery/carla-discovery.cpp b/c++/carla-discovery/carla-discovery.cpp index fd38789..be3163f 100644 --- a/c++/carla-discovery/carla-discovery.cpp +++ b/c++/carla-discovery/carla-discovery.cpp @@ -69,6 +69,8 @@ intptr_t VstHostCallback(AEffect* const effect, const int32_t opcode, const int3 qDebug("VstHostCallback(%p, opcode: %s, index: %i, value: " P_INTPTR ", opt: %f", effect, VstMasterOpcode2str(opcode), index, value, opt); #endif + intptr_t ret = 0; + switch (opcode) { case audioMasterAutomate: @@ -77,10 +79,12 @@ intptr_t VstHostCallback(AEffect* const effect, const int32_t opcode, const int3 break; case audioMasterVersion: - return kVstVersion; + ret = kVstVersion; + break; case audioMasterCurrentId: - return VstCurrentUniqueId; + ret = VstCurrentUniqueId; + break; case audioMasterGetTime: static VstTimeInfo_R timeInfo; @@ -96,83 +100,95 @@ intptr_t VstHostCallback(AEffect* const effect, const int32_t opcode, const int3 timeInfo.timeSigDenominator = 4; timeInfo.flags |= kVstTimeSigValid; - return (intptr_t)&timeInfo; + ret = (intptr_t)&timeInfo; + break; case audioMasterTempoAt: // Deprecated in VST SDK 2.4 - return 120 * 10000; + ret = 120 * 10000; + break; case audioMasterGetSampleRate: - return sampleRate; + ret = sampleRate; + break; case audioMasterGetBlockSize: - return bufferSize; + ret = bufferSize; + break; case audioMasterGetVendorString: - strcpy((char*)ptr, "Cadence"); + if (ptr) + strcpy((char*)ptr, "Cadence"); break; case audioMasterGetProductString: - strcpy((char*)ptr, "Carla-Discovery"); + if (ptr) + strcpy((char*)ptr, "Carla-Discovery"); break; case audioMasterGetVendorVersion: - return 0x05; // 0.5 + ret = 0x05; // 0.5 + break; case audioMasterCanDo: #if DEBUG qDebug("VstHostCallback:audioMasterCanDo - %s", (char*)ptr); #endif - if (strcmp((char*)ptr, "supplyIdle") == 0) - return 1; - if (strcmp((char*)ptr, "sendVstEvents") == 0) - return 1; - if (strcmp((char*)ptr, "sendVstMidiEvent") == 0) - return 1; - if (strcmp((char*)ptr, "sendVstMidiEventFlagIsRealtime") == 0) - return -1; - if (strcmp((char*)ptr, "sendVstTimeInfo") == 0) - return 1; - if (strcmp((char*)ptr, "receiveVstEvents") == 0) - return 1; - if (strcmp((char*)ptr, "receiveVstMidiEvent") == 0) - return 1; - if (strcmp((char*)ptr, "receiveVstTimeInfo") == 0) - return -1; - if (strcmp((char*)ptr, "reportConnectionChanges") == 0) - return -1; - if (strcmp((char*)ptr, "acceptIOChanges") == 0) - return -1; - if (strcmp((char*)ptr, "sizeWindow") == 0) - return 1; - if (strcmp((char*)ptr, "offline") == 0) - return -1; - if (strcmp((char*)ptr, "openFileSelector") == 0) - return -1; - if (strcmp((char*)ptr, "closeFileSelector") == 0) - return -1; - if (strcmp((char*)ptr, "startStopProcess") == 0) - return 1; - if (strcmp((char*)ptr, "supportShell") == 0) - return 1; - if (strcmp((char*)ptr, "shellCategory") == 0) - return 1; - - // unimplemented - qWarning("VstHostCallback:audioMasterCanDo - Got unknown feature request '%s'", (char*)ptr); - return 0; + if (! ptr) + ret = 0; + else if (strcmp((char*)ptr, "supplyIdle") == 0) + ret = 1; + else if (strcmp((char*)ptr, "sendVstEvents") == 0) + ret = 1; + else if (strcmp((char*)ptr, "sendVstMidiEvent") == 0) + ret = 1; + else if (strcmp((char*)ptr, "sendVstMidiEventFlagIsRealtime") == 0) + ret = -1; + else if (strcmp((char*)ptr, "sendVstTimeInfo") == 0) + ret = 1; + else if (strcmp((char*)ptr, "receiveVstEvents") == 0) + ret = 1; + else if (strcmp((char*)ptr, "receiveVstMidiEvent") == 0) + ret = 1; + else if (strcmp((char*)ptr, "receiveVstTimeInfo") == 0) + ret = -1; + else if (strcmp((char*)ptr, "reportConnectionChanges") == 0) + ret = 1; + else if (strcmp((char*)ptr, "acceptIOChanges") == 0) + ret = -1; + else if (strcmp((char*)ptr, "sizeWindow") == 0) + ret = 1; + else if (strcmp((char*)ptr, "offline") == 0) + ret = -1; + else if (strcmp((char*)ptr, "openFileSelector") == 0) + ret = -1; + else if (strcmp((char*)ptr, "closeFileSelector") == 0) + ret = -1; + else if (strcmp((char*)ptr, "startStopProcess") == 0) + ret = 1; + else if (strcmp((char*)ptr, "supportShell") == 0) + ret = 1; + else if (strcmp((char*)ptr, "shellCategory") == 0) + ret = 1; + else + { + // unimplemented + qWarning("VstHostCallback:audioMasterCanDo - Got unknown feature request '%s'", (char*)ptr); + ret = 0; + } + break; case audioMasterGetLanguage: - return kVstLangEnglish; + ret = kVstLangEnglish; + break; default: qDebug("VstHostCallback(%p, opcode: %s, index: %i, value: " P_INTPTR ", opt: %f", effect, VstMasterOpcode2str(opcode), index, value, opt); break; } - return 0; - Q_UNUSED(value); + return ret; } // ------------------------------ Plugin Checks ----------------------------- @@ -647,11 +663,19 @@ void do_lv2_check(const char* const bundle, const bool init) } else if (LV2_IS_PORT_CONTROL(Port->Type)) { - if (LV2_IS_PORT_INPUT(Port->Type)) - parametersIns += 1; - else if (LV2_IS_PORT_OUTPUT(Port->Type) && ! LV2_IS_PORT_LATENCY(Port->Designation)) - parametersOuts += 1; - parametersTotal += 1; + if (LV2_IS_PORT_DESIGNATION_LATENCY(Port->Designation) || LV2_IS_PORT_DESIGNATION_SAMPLE_RATE(Port->Designation) || + LV2_IS_PORT_DESIGNATION_FREEWHEELING(Port->Designation) || LV2_IS_PORT_DESIGNATION_TIME(Port->Designation)) + { + pass(); + } + else + { + if (LV2_IS_PORT_INPUT(Port->Type)) + parametersIns += 1; + else if (LV2_IS_PORT_OUTPUT(Port->Type)) + parametersOuts += 1; + parametersTotal += 1; + } } else if (Port->Type & LV2_PORT_SUPPORTS_MIDI_EVENT) { @@ -670,8 +694,9 @@ void do_lv2_check(const char* const bundle, const bool init) hints |= PLUGIN_HAS_GUI; DISCOVERY_OUT("init", "-----------"); - DISCOVERY_OUT("name", rdf_descriptor->Name); DISCOVERY_OUT("label", rdf_descriptor->URI); + if (rdf_descriptor->Name) + DISCOVERY_OUT("name", rdf_descriptor->Name); if (rdf_descriptor->Author) DISCOVERY_OUT("maker", rdf_descriptor->Author); if (rdf_descriptor->License)