got closer to vst3 sdk wrt plugin controller

This commit is contained in:
Stefano D'Angelo 2023-12-18 16:56:39 +01:00
parent 9c8ff3ae2e
commit e00ac8003b

View File

@ -46,6 +46,9 @@ static Steinberg_tresult pluginQueryInterface(pluginInstance *p, const Steinberg
offset = offsetof(pluginInstance, vtblIProcessContextRequirements); offset = offsetof(pluginInstance, vtblIProcessContextRequirements);
else { else {
TRACE(" not supported\n"); TRACE(" not supported\n");
for (int i = 0; i < 16; i++)
TRACE(" %x", iid[i]);
TRACE("\n");
*obj = NULL; *obj = NULL;
return Steinberg_kNoInterface; return Steinberg_kNoInterface;
} }
@ -419,6 +422,7 @@ typedef struct controller {
#if DATA_PLUGIN_PARAMETERS_N > 0 #if DATA_PLUGIN_PARAMETERS_N > 0
double parameters[DATA_PLUGIN_PARAMETERS_N]; double parameters[DATA_PLUGIN_PARAMETERS_N];
#endif #endif
struct Steinberg_Vst_IComponentHandler* componentHandler;
} controller; } controller;
static Steinberg_tresult controllerQueryInterface(void* thisInterface, const Steinberg_TUID iid, void** obj) { static Steinberg_tresult controllerQueryInterface(void* thisInterface, const Steinberg_TUID iid, void** obj) {
@ -426,7 +430,10 @@ static Steinberg_tresult controllerQueryInterface(void* thisInterface, const Ste
if (memcmp(iid, Steinberg_FUnknown_iid, sizeof(Steinberg_TUID)) if (memcmp(iid, Steinberg_FUnknown_iid, sizeof(Steinberg_TUID))
&& memcmp(iid, Steinberg_IPluginBase_iid, sizeof(Steinberg_TUID)) && memcmp(iid, Steinberg_IPluginBase_iid, sizeof(Steinberg_TUID))
&& memcmp(iid, Steinberg_Vst_IEditController_iid, sizeof(Steinberg_TUID))) { && memcmp(iid, Steinberg_Vst_IEditController_iid, sizeof(Steinberg_TUID))) {
TRACE(" oooo\n"); TRACE(" none\n");
for (int i = 0; i < 16; i++)
TRACE(" %x", iid[i]);
TRACE("\n");
*obj = NULL; *obj = NULL;
return Steinberg_kNoInterface; return Steinberg_kNoInterface;
} }
@ -460,6 +467,10 @@ static Steinberg_tresult controllerInitialize(void* thisInterface, struct Steinb
if (c->context != NULL) if (c->context != NULL)
return Steinberg_kResultFalse; return Steinberg_kResultFalse;
c->context = context; c->context = context;
#if DATA_PLUGIN_PARAMETERS_N > 0
for (int i = 0; i < DATA_PLUGIN_PARAMETERS_N; i++)
c->parameters[i] = parameterInfo[i].defaultNormalizedValue;
#endif
return Steinberg_kResultOk; return Steinberg_kResultOk;
} }
@ -473,7 +484,7 @@ static Steinberg_tresult controllerTerminate(void* thisInterface) {
static Steinberg_tresult controllerSetParamNormalized(void* thisInterface, Steinberg_Vst_ParamID id, Steinberg_Vst_ParamValue value); static Steinberg_tresult controllerSetParamNormalized(void* thisInterface, Steinberg_Vst_ParamID id, Steinberg_Vst_ParamValue value);
static Steinberg_tresult controllerSetComponentState(void* thisInterface, struct Steinberg_IBStream* state) { static Steinberg_tresult controllerSetComponentState(void* thisInterface, struct Steinberg_IBStream* state) {
TRACE("controller set component state\n"); TRACE("controller set component state %p %p\n", thisInterface, (void *)state);
if (state == NULL) if (state == NULL)
return Steinberg_kResultFalse; return Steinberg_kResultFalse;
#if DATA_PLUGIN_PARAMETERS_N > 0 #if DATA_PLUGIN_PARAMETERS_N > 0
@ -490,6 +501,7 @@ static Steinberg_tresult controllerSetComponentState(void* thisInterface, struct
controllerSetParamNormalized(thisInterface, i, v.f); controllerSetParamNormalized(thisInterface, i, v.f);
} }
#endif #endif
TRACE(" ok\n");
return Steinberg_kResultTrue; return Steinberg_kResultTrue;
} }
@ -513,7 +525,7 @@ static Steinberg_tresult controllerGetParameterInfo(void* thisInterface, Steinbe
if (paramIndex < 0 || paramIndex >= DATA_PLUGIN_PARAMETERS_N) if (paramIndex < 0 || paramIndex >= DATA_PLUGIN_PARAMETERS_N)
return Steinberg_kResultFalse; return Steinberg_kResultFalse;
*info = parameterInfo[paramIndex]; *info = parameterInfo[paramIndex];
return Steinberg_kResultOk; return Steinberg_kResultTrue;
} }
static void dToStr(double v, Steinberg_Vst_String128 s, int precision) { static void dToStr(double v, Steinberg_Vst_String128 s, int precision) {
@ -564,7 +576,7 @@ static Steinberg_tresult controllerGetParamStringByValue(void* thisInterface, St
return Steinberg_kResultFalse; return Steinberg_kResultFalse;
//mapping TBD //mapping TBD
dToStr(valueNormalized, string, 2); dToStr(valueNormalized, string, 2);
return Steinberg_kResultOk; return Steinberg_kResultTrue;
} }
void TCharToD(Steinberg_Vst_TChar* s, double *v) { void TCharToD(Steinberg_Vst_TChar* s, double *v) {
@ -601,7 +613,7 @@ static Steinberg_tresult controllerGetParamValueByString(void* thisInterface, St
return Steinberg_kResultFalse; return Steinberg_kResultFalse;
//mapping TBD //mapping TBD
TCharToD(string, valueNormalized); TCharToD(string, valueNormalized);
return Steinberg_kResultOk; return Steinberg_kResultTrue;
} }
static Steinberg_Vst_ParamValue controllerNormalizedParamToPlain(void* thisInterface, Steinberg_Vst_ParamID id, Steinberg_Vst_ParamValue valueNormalized) { static Steinberg_Vst_ParamValue controllerNormalizedParamToPlain(void* thisInterface, Steinberg_Vst_ParamID id, Steinberg_Vst_ParamValue valueNormalized) {
@ -633,7 +645,7 @@ static Steinberg_tresult controllerSetParamNormalized(void* thisInterface, Stein
return Steinberg_kResultFalse; return Steinberg_kResultFalse;
controller *c = (controller *)thisInterface; controller *c = (controller *)thisInterface;
c->parameters[id] = value; c->parameters[id] = value;
return Steinberg_kResultOk; return Steinberg_kResultTrue;
#else #else
return Steinberg_kResultFalse; return Steinberg_kResultFalse;
#endif #endif
@ -641,8 +653,15 @@ static Steinberg_tresult controllerSetParamNormalized(void* thisInterface, Stein
static Steinberg_tresult controllerSetComponentHandler(void* thisInterface, struct Steinberg_Vst_IComponentHandler* handler) { static Steinberg_tresult controllerSetComponentHandler(void* thisInterface, struct Steinberg_Vst_IComponentHandler* handler) {
TRACE("controller set component handler\n"); TRACE("controller set component handler\n");
//TBD controller *c = (controller *)thisInterface;
return Steinberg_kNotImplemented; if (c->componentHandler != handler) {
if (c->componentHandler != NULL)
c->componentHandler->lpVtbl->release(c->componentHandler);
c->componentHandler = handler;
if (c->componentHandler != NULL)
c->componentHandler->lpVtbl->addRef(c->componentHandler);
}
return Steinberg_kResultTrue;
} }
static struct Steinberg_IPlugView* controllerCreateView(void* thisInterface, Steinberg_FIDString name) { static struct Steinberg_IPlugView* controllerCreateView(void* thisInterface, Steinberg_FIDString name) {
@ -757,6 +776,9 @@ static Steinberg_tresult factoryCreateInstance(void *thisInterface, Steinberg_FI
offset = offsetof(pluginInstance, vtblIProcessContextRequirements); offset = offsetof(pluginInstance, vtblIProcessContextRequirements);
} else { } else {
TRACE(" INothing :(\n"); TRACE(" INothing :(\n");
for (int i = 0; i < 16; i++)
TRACE(" %x", iid[i]);
TRACE("\n");
return Steinberg_kNoInterface; return Steinberg_kNoInterface;
} }
pluginInstance *p = malloc(sizeof(pluginInstance)); pluginInstance *p = malloc(sizeof(pluginInstance));
@ -781,10 +803,7 @@ static Steinberg_tresult factoryCreateInstance(void *thisInterface, Steinberg_FI
c->vtblIEditController = &controllerVtbl; c->vtblIEditController = &controllerVtbl;
c->refs = 1; c->refs = 1;
c->context = NULL; c->context = NULL;
#if DATA_PLUGIN_PARAMETERS_N > 0 c->componentHandler = NULL;
for (int i = 0; i < DATA_PLUGIN_PARAMETERS_N; i++)
c->parameters[i] = parameterInfo[i].defaultNormalizedValue;
#endif
*obj = c; *obj = c;
TRACE(" instance: %p\n", (void *)c); TRACE(" instance: %p\n", (void *)c);
} else { } else {