Browse Source

Implement v3_process_context_requirements

Signed-off-by: falkTX <falktx@falktx.com>
pull/330/head
falkTX 4 years ago
parent
commit
ef64e046b0
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 67 additions and 3 deletions
  1. +67
    -3
      distrho/src/DistrhoPluginVST3.cpp

+ 67
- 3
distrho/src/DistrhoPluginVST3.cpp View File

@@ -824,7 +824,6 @@ public:
(fTimePosition.bbt.bar-1);

fPlugin.setTimePosition(fTimePosition);

}
#endif

@@ -1387,6 +1386,63 @@ struct dpf_edit_controller : v3_edit_controller_cpp {
}
};

// --------------------------------------------------------------------------------------------------------------------
// dpf_process_context_requirements

struct v3_process_context_requirements_cpp : v3_funknown {
v3_process_context_requirements req;
};

struct dpf_process_context_requirements : v3_process_context_requirements_cpp {
dpf_process_context_requirements()
{
static const uint8_t* kSupportedInterfaces[] = {
v3_funknown_iid,
v3_process_context_requirements_iid
};

// ------------------------------------------------------------------------------------------------------------
// v3_funknown

query_interface = []V3_API(void* self, const v3_tuid iid, void** iface) -> v3_result
{
d_stdout("dpf_process_context_requirements::query_interface => %p %s %p", self, tuid2str(iid), iface);
*iface = NULL;
DISTRHO_SAFE_ASSERT_RETURN(self != nullptr, V3_NO_INTERFACE);

for (const uint8_t* interface_iid : kSupportedInterfaces)
{
if (v3_tuid_match(interface_iid, iid))
{
*iface = self;
return V3_OK;
}
}

return V3_NO_INTERFACE;
};

// this is used statically, so we don't have to care here
ref = []V3_API(void*) -> uint32_t { return 1; };
unref = []V3_API(void*) -> uint32_t { return 0; };

// ------------------------------------------------------------------------------------------------------------
// v3_process_context_requirements

req.get_process_context_requirements = []V3_API(void*) -> uint32_t
{
return 0x0
|V3_PROCESS_CTX_NEED_CONTINUOUS_TIME // V3_PROCESS_CTX_CONT_TIME_VALID
|V3_PROCESS_CTX_NEED_PROJECT_TIME // V3_PROCESS_CTX_PROJECT_TIME_VALID
|V3_PROCESS_CTX_NEED_TEMPO // V3_PROCESS_CTX_TEMPO_VALID
|V3_PROCESS_CTX_NEED_TIME_SIG // V3_PROCESS_CTX_TIME_SIG_VALID
|V3_PROCESS_CTX_NEED_TRANSPORT_STATE; // V3_PROCESS_CTX_PLAYING
};
}

DISTRHO_PREVENT_HEAP_ALLOCATION
};

// --------------------------------------------------------------------------------------------------------------------
// dpf_audio_processor

@@ -1404,7 +1460,7 @@ struct dpf_audio_processor : v3_audio_processor_cpp {
self(s),
vst3(v)
{
static const uint8_t* kSupportedInterfaces[] = {
static const uint8_t* kSupportedInterfacesBase[] = {
v3_funknown_iid,
v3_audio_processor_iid
};
@@ -1418,7 +1474,7 @@ struct dpf_audio_processor : v3_audio_processor_cpp {
*iface = NULL;
DISTRHO_SAFE_ASSERT_RETURN(self != nullptr, V3_NO_INTERFACE);

for (const uint8_t* interface_iid : kSupportedInterfaces)
for (const uint8_t* interface_iid : kSupportedInterfacesBase)
{
if (v3_tuid_match(interface_iid, iid))
{
@@ -1427,6 +1483,14 @@ struct dpf_audio_processor : v3_audio_processor_cpp {
}
}

if (v3_tuid_match(v3_process_context_requirements_iid, iid))
{
static dpf_process_context_requirements context_req;
static dpf_process_context_requirements* context_req_ptr = &context_req;;
*iface = &context_req_ptr;
return V3_OK;
}

return V3_NO_INTERFACE;
};



Loading…
Cancel
Save