Exemplo n.º 1
0
Arquivo: plugin.c Projeto: vpinon/mlt
plugin_t *
plugin_new (plugin_desc_t * desc, jack_rack_t * jack_rack)
{
    void * dl_handle;
    const LADSPA_Descriptor * descriptor;
    LADSPA_Handle * instances;
    gint copies;
    unsigned long i;
    int err;
    plugin_t * plugin;

    /* open the plugin */
    err = plugin_open_plugin (desc, &dl_handle, &descriptor);
    if (err)
        return NULL;

    /* create the instances */
    copies = plugin_desc_get_copies (desc, jack_rack->channels);
    instances = g_malloc (sizeof (LADSPA_Handle) * copies);

    err = plugin_instantiate (descriptor, desc->index, copies, instances);
    if (err)
    {
        g_free (instances);
        dlclose (dl_handle);
        return NULL;
    }


    plugin = g_malloc (sizeof (plugin_t));

    plugin->descriptor = descriptor;
    plugin->dl_handle = dl_handle;
    plugin->desc = desc;
    plugin->copies = copies;
    plugin->enabled = FALSE;
    plugin->next = NULL;
    plugin->prev = NULL;
    plugin->wet_dry_enabled = FALSE;
    plugin->jack_rack = jack_rack;

    /* create audio memory and wet/dry stuff */
    plugin->audio_output_memory   = g_malloc (sizeof (LADSPA_Data *) * jack_rack->channels);
    plugin->wet_dry_fifos  = g_malloc (sizeof (lff_t) * jack_rack->channels);
    plugin->wet_dry_values = g_malloc (sizeof (LADSPA_Data) * jack_rack->channels);

    for (i = 0; i < jack_rack->channels; i++)
    {
        plugin->audio_output_memory[i] = g_malloc (sizeof (LADSPA_Data) * buffer_size);
        lff_init (plugin->wet_dry_fifos + i, CONTROL_FIFO_SIZE, sizeof (LADSPA_Data));
        plugin->wet_dry_values[i] = 1.0;
    }

    /* create holders and fill them out */
    plugin->holders = g_malloc (sizeof (ladspa_holder_t) * copies);
    for (i = 0; i < copies; i++)
        plugin_init_holder (plugin, i, instances[i], jack_rack);

    return plugin;
}
Exemplo n.º 2
0
Arquivo: plugin.c Projeto: vpinon/mlt
static void
plugin_init_holder (plugin_t * plugin,
                    guint copy,
                    LADSPA_Handle instance,
                    jack_rack_t * jack_rack)
{
    unsigned long i;
    plugin_desc_t * desc;
    ladspa_holder_t * holder;

    desc = plugin->desc;
    holder = plugin->holders + copy;

    holder->instance = instance;

    if (desc->control_port_count > 0)
    {
        holder->ui_control_fifos    = g_malloc (sizeof (lff_t) * desc->control_port_count);
        holder->control_memory = g_malloc (sizeof (LADSPA_Data) * desc->control_port_count);
    }
    else
    {
        holder->ui_control_fifos  = NULL;
        holder->control_memory = NULL;
    }

    for (i = 0; i < desc->control_port_count; i++)
    {
        lff_init (holder->ui_control_fifos + i, CONTROL_FIFO_SIZE, sizeof (LADSPA_Data));
        holder->control_memory[i] =
            plugin_desc_get_default_control_value (desc, desc->control_port_indicies[i], sample_rate);

        plugin->descriptor->
        connect_port (instance, desc->control_port_indicies[i], holder->control_memory + i);
    }

    if (desc->status_port_count > 0)
    {
        holder->status_memory = g_malloc (sizeof (LADSPA_Data) * desc->status_port_count);
    }
    else
    {
        holder->status_memory = NULL;
    }

    for (i = 0; i < desc->status_port_count; i++)
    {
        plugin->descriptor->
        connect_port (instance, desc->status_port_indicies[i], holder->status_memory + i);
    }

    if (jack_rack->procinfo->jack_client && plugin->desc->aux_channels > 0)
        plugin_create_aux_ports (plugin, copy, jack_rack);

    if (plugin->descriptor->activate)
        plugin->descriptor->activate (instance);
}
Exemplo n.º 3
0
lff_t *
lff_new (unsigned int size, size_t object_size)
{
  lff_t * lff;
  
  lff = g_malloc (sizeof (lff_t));
  
  lff_init (lff, size, object_size);
  
  return lff;
}
Exemplo n.º 4
0
static void
plugin_init_holder (plugin_t * plugin,
                    guint copy,
                    LADSPA_Handle instance,
                    jack_rack_t * jack_rack)
{
  unsigned long i;
  plugin_desc_t * desc;
  ladspa_holder_t * holder;
  
  desc = plugin->desc;
  holder = plugin->holders + copy;
  
  holder->instance = instance;
  
  if (desc->control_port_count > 0)
    {
      holder->ui_control_fifos    = g_malloc (sizeof (lff_t) * desc->control_port_count);
#ifdef HAVE_ALSA
      holder->midi_control_fifos  = g_malloc (sizeof (lff_t) * desc->control_port_count);
#endif
      holder->control_memory = g_malloc (sizeof (LADSPA_Data) * desc->control_port_count);
    }
  else
    {
      holder->ui_control_fifos  = NULL;
#ifdef HAVE_ALSA
      holder->midi_control_fifos  = NULL;
#endif
      holder->control_memory = NULL;
    }
  
  for (i = 0; i < desc->control_port_count; i++)
    {
      lff_init (holder->ui_control_fifos + i, CONTROL_FIFO_SIZE, sizeof (LADSPA_Data));
#ifdef HAVE_ALSA
      lff_init (holder->midi_control_fifos + i, CONTROL_FIFO_SIZE, sizeof (LADSPA_Data));
#endif
      
      holder->control_memory[i] =
        plugin_desc_get_default_control_value (desc, desc->control_port_indicies[i], sample_rate);        
      
      plugin->descriptor->
        connect_port (instance, desc->control_port_indicies[i], holder->control_memory + i);
    }
  
  for (i = 0; i < desc->port_count; i++)
    {
      if (!LADSPA_IS_PORT_CONTROL (desc->port_descriptors[i]))
        continue;
      
      if (LADSPA_IS_PORT_OUTPUT (desc->port_descriptors[i]))
        plugin->descriptor-> connect_port (instance, i, &unused_control_port_output);
    }
  
  if (plugin->desc->aux_channels > 0)
    plugin_create_aux_ports (plugin, copy, jack_rack);
  
  if (plugin->descriptor->activate)
    plugin->descriptor->activate (instance);
}