| 
							- /*
 -   LV2 Programs Extension
 -   Copyright 2012 Filipe Coelho <falktx@gmail.com>
 - 
 -   Permission to use, copy, modify, and/or distribute this software for any
 -   purpose with or without fee is hereby granted, provided that the above
 -   copyright notice and this permission notice appear in all copies.
 - 
 -   THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 -   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 -   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 -   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 -   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 -   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 -   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 - */
 - 
 - /**
 -    @file programs.h
 -    C header for the LV2 programs extension <http://kxstudio.sf.net/ns/lv2ext/programs>.
 - */
 - 
 - #ifndef LV2_PROGRAMS_H
 - #define LV2_PROGRAMS_H
 - 
 - #include "lv2.h"
 - #include "ui.h"
 - 
 - #define LV2_PROGRAMS_URI    "http://kxstudio.sf.net/ns/lv2ext/programs"
 - #define LV2_PROGRAMS_PREFIX LV2_PROGRAMS_URI "#"
 - 
 - #define LV2_PROGRAMS__Host        LV2_PROGRAMS_PREFIX "Host"
 - #define LV2_PROGRAMS__Interface   LV2_PROGRAMS_PREFIX "Interface"
 - #define LV2_PROGRAMS__UIInterface LV2_PROGRAMS_PREFIX "UIInterface"
 - 
 - #ifdef __cplusplus
 - extern "C" {
 - #endif
 - 
 - typedef void* LV2_Programs_Handle;
 - 
 - typedef struct _LV2_Program_Descriptor {
 - 
 -     /** Bank number for this program. Note that this extension does not
 -         support MIDI-style separation of bank LSB and MSB values. There is
 -         no restriction on the set of available banks: the numbers do not
 -         need to be contiguous, there does not need to be a bank 0, etc. */
 -     uint32_t bank;
 - 
 -     /** Program number (unique within its bank) for this program. There is
 -         no restriction on the set of available programs: the numbers do not
 -         need to be contiguous, there does not need to be a program 0, etc. */
 -     uint32_t program;
 - 
 -     /** Name of the program. */
 -     const char * name;
 - 
 - } LV2_Program_Descriptor;
 - 
 - /**
 -    Programs extension, plugin data.
 - 
 -    When the plugin's extension_data is called with argument LV2_PROGRAMS__Interface,
 -    the plugin MUST return an LV2_Programs_Instance structure, which remains valid
 -    for the lifetime of the plugin.
 - */
 - typedef struct _LV2_Programs_Interface {
 -     /**
 -      * get_program()
 -      *
 -      * This member is a function pointer that provides a description
 -      * of a program (named preset sound) available on this plugin.
 -      *
 -      * The index argument is an index into the plugin's list of
 -      * programs, not a program number as represented by the Program
 -      * field of the LV2_Program_Descriptor. (This distinction is
 -      * needed to support plugins that use non-contiguous program or
 -      * bank numbers.)
 -      *
 -      * This function returns a LV2_Program_Descriptor pointer that is
 -      * guaranteed to be valid only until the next call to get_program
 -      * or deactivate, on the same plugin instance. This function must
 -      * return NULL if passed an index argument out of range, so that
 -      * the host can use it to query the number of programs as well as
 -      * their properties.
 -      */
 -     const LV2_Program_Descriptor *(*get_program)(LV2_Handle handle,
 -                                                  uint32_t index);
 - 
 -     /**
 -      * select_program()
 -      *
 -      * This member is a function pointer that selects a new program
 -      * for this plugin. The program change should take effect
 -      * immediately at the start of the next run() call. (This
 -      * means that a host providing the capability of changing programs
 -      * between any two notes on a track must vary the block size so as
 -      * to place the program change at the right place. A host that
 -      * wanted to avoid this would probably just instantiate a plugin
 -      * for each program.)
 -      *
 -      * Plugins should ignore a select_program() call with an invalid
 -      * bank or program.
 -      *
 -      * A plugin is not required to select any particular default
 -      * program on activate(): it's the host's duty to set a program
 -      * explicitly.
 -      *
 -      * A plugin is permitted to re-write the values of its input
 -      * control ports when select_program is called. The host should
 -      * re-read the input control port values and update its own
 -      * records appropriately. (This is the only circumstance in which
 -      * a LV2 plugin is allowed to modify its own control-input ports.)
 -      */
 -     void (*select_program)(LV2_Handle handle,
 -                            uint32_t bank,
 -                            uint32_t program);
 - 
 - } LV2_Programs_Interface;
 - 
 - /**
 -    Programs extension, UI data.
 - 
 -    When the UI's extension_data is called with argument LV2_PROGRAMS__UIInterface,
 -    the UI MUST return an LV2_Programs_UI_Interface structure, which remains valid
 -    for the lifetime of the UI.
 - */
 - typedef struct _LV2_Programs_UI_Interface {
 -     /**
 -      * select_program()
 -      *
 -      * This is exactly the same as select_program in LV2_Programs_Instance,
 -      * but this struct relates to the UI instead of the plugin.
 -      *
 -      * When called, UIs should update their state to match the selected program.
 -      */
 -     void (*select_program)(LV2UI_Handle handle,
 -                            uint32_t bank,
 -                            uint32_t program);
 - 
 - } LV2_Programs_UI_Interface;
 - 
 - /**
 -     Feature data for LV2_PROGRAMS__Host.
 - */
 - typedef struct _LV2_Programs_Host {
 -     /**
 -      *  Opaque host data.
 -      */
 -     LV2_Programs_Handle handle;
 - 
 -     /**
 -      * program_changed()
 -      *
 -      * Tell the host to reload a plugin's program.
 -      * Parameter handle MUST be the 'handle' member of this struct.
 -      * Parameter index is program index to change.
 -      * When index is -1, host should reload all the programs.
 -      *
 -      * NOTE: The plugin MUST NEVER call this function on a RT context or during run().
 -      */
 -     void (*program_changed)(LV2_Programs_Handle handle,
 -                             int32_t index);
 - 
 - } LV2_Programs_Host;
 - 
 - #ifdef __cplusplus
 - } /* extern "C" */
 - #endif
 - 
 - #endif /* LV2_PROGRAMS_H */
 
 
  |