Browse Source

Carla: More VST fixing, direct jackbridge handling

tags/v0.9.0
falkTX 13 years ago
parent
commit
83fbf007de
3 changed files with 62 additions and 22 deletions
  1. +20
    -20
      c++/carla-backend/vst.cpp
  2. +7
    -1
      c++/carla-bridge/carla_bridge_plugin.cpp
  3. +35
    -1
      c++/carla-jackbridge/carla_jackbridge.h

+ 20
- 20
c++/carla-backend/vst.cpp View File

@@ -1692,7 +1692,7 @@ public:
static intptr_t VSTCALLBACK hostCallback(AEffect* const effect, const int32_t opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt)
{
#ifdef DEBUG
if (opcode != audioMasterGetTime)
if (opcode != audioMasterGetTime && opcode != audioMasterProcessEvents && opcode != audioMasterGetCurrentProcessLevel && opcode != audioMasterGetOutputLatency)
qDebug("VstPlugin::hostCallback(%p, %02i:%s, %i, " P_INTPTR ", %p, %f)", effect, opcode, vstMasterOpcode2str(opcode), index, value, ptr, opt);
#endif

@@ -2153,6 +2153,15 @@ public:
return false;
}

#ifdef VESTIGE_HEADER
effect->ptr1 = this;
#else
effect->resvd1 = ToVstPtr(this);
#endif

effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f);
effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0.0f);

// ---------------------------------------------------------------
// get info

@@ -2174,16 +2183,18 @@ public:
}

// ---------------------------------------------------------------
// initialize VST stuff
// register client

#ifdef VESTIGE_HEADER
effect->ptr1 = this;
#else
effect->resvd1 = ToVstPtr(this);
#endif
x_client = x_engine->addClient(this);

effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f);
effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0.0f);
if (! x_client->isOk())
{
setLastError("Failed to register plugin client");
return false;
}

// ---------------------------------------------------------------
// initialize VST stuff

#if ! VST_FORCE_DEPRECATED
effect->dispatcher(effect, effSetBlockSizeAndSampleRate, 0, x_engine->getBufferSize(), nullptr, x_engine->getSampleRate());
@@ -2211,17 +2222,6 @@ public:
if ((effect->flags & effFlagsCanReplacing) > 0 && effect->processReplacing != effect->process)
m_hints |= PLUGIN_CAN_PROCESS_REPLACING;

// ---------------------------------------------------------------
// register client

x_client = x_engine->addClient(this);

if (! x_client->isOk())
{
setLastError("Failed to register plugin client");
return false;
}

// ---------------------------------------------------------------
// gui stuff



+ 7
- 1
c++/carla-bridge/carla_bridge_plugin.cpp View File

@@ -220,6 +220,8 @@ public:
{
qDebug("BridgePluginClient::BridgePluginClient()");

hasUI = false;

msgTimer = 0;
nextWidth = 0;
nextHeight = 0;
@@ -265,7 +267,8 @@ public:

if (showGui)
{
show();
if (hasUI)
show();
}
else
{
@@ -348,6 +351,8 @@ public:
if (! (plugin && pluginGui))
return;

hasUI = true;

pluginGui->setResizable(resizable);
pluginGui->setTitle(plugin->name());

@@ -662,6 +667,7 @@ protected:
// ---------------------------------------------------------------------

private:
bool hasUI;
int msgTimer;
int nextWidth, nextHeight;
QString nextChunkFilePath;


+ 35
- 1
c++/carla-jackbridge/carla_jackbridge.h View File

@@ -23,6 +23,8 @@
#include <jack/types.h>
#include <jack/transport.h> // needed for JACK1

#ifdef BUILD_BRIDGE

typedef unsigned char jackbridge_midi_data_t;

struct jackbridge_midi_event_t {
@@ -38,7 +40,6 @@ CARLA_EXPORT char* jackbridge_get_client_name(jack_client_t* client);
CARLA_EXPORT int jackbridge_port_name_size();
CARLA_EXPORT int jackbridge_activate(jack_client_t* client);
CARLA_EXPORT int jackbridge_deactivate(jack_client_t* client);
CARLA_EXPORT int jackbridge_set_process_thread(jack_client_t* client, JackThreadCallback thread_callback, void *arg);
CARLA_EXPORT void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown_callback, void* arg);
CARLA_EXPORT int jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg);
CARLA_EXPORT int jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallback freewheel_callback, void* arg);
@@ -58,4 +59,37 @@ CARLA_EXPORT int jackbridge_midi_event_write(void* port_buffer, jack_nframes_t t

CARLA_EXPORT jack_transport_state_t jackbridge_transport_query(const jack_client_t* client, jack_position_t* pos);

#else

#define jackbridge_midi_data_t jack_midi_data_t
#define jackbridge_midi_event_t jack_midi_event_t

#define jackbridge_client_open jack_client_open
#define jackbridge_client_close jack_client_close
#define jackbridge_client_name_size jack_client_name_size
#define jackbridge_get_client_name jack_get_client_name
#define jackbridge_port_name_size jack_port_name_size
#define jackbridge_activate jack_activate
#define jackbridge_deactivate jack_deactivate
#define jackbridge_on_shutdown jack_on_shutdown
#define jackbridge_set_process_callback jack_set_process_callback
#define jackbridge_set_freewheel_callback jack_set_freewheel_callback
#define jackbridge_set_buffer_size_callback jack_set_buffer_size_callback
#define jackbridge_set_sample_rate_callback jack_set_sample_rate_callback
#define jackbridge_get_sample_rate jack_get_sample_rate
#define jackbridge_get_buffer_size jack_get_buffer_size
#define jackbridge_port_register jack_port_register
#define jackbridge_port_unregister jack_port_unregister
#define jackbridge_port_get_buffer jack_port_get_buffer

#define jackbridge_midi_get_event_count jack_midi_get_event_count
#define jackbridge_midi_event_get jack_midi_event_get
#define jackbridge_midi_clear_buffer jack_midi_clear_buffer
#define jackbridge_midi_event_reserve jack_midi_event_reserve
#define jackbridge_midi_event_write jack_midi_event_write

#define jackbridge_transport_query jack_transport_query

#endif

#endif // CARLA_JACKBRIDGE_H

Loading…
Cancel
Save