| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| Copyright (C) 2011 David Robillard | |||||
| Copyright (C) 2011-2014 David Robillard | |||||
| Copyright (C) 2013 Paul Davis | Copyright (C) 2013 Paul Davis | ||||
| This program is free software; you can redistribute it and/or modify it | This program is free software; you can redistribute it and/or modify it | ||||
| @@ -40,6 +40,15 @@ extern "C" { | |||||
| /** | /** | ||||
| * A single property (key:value pair). | * A single property (key:value pair). | ||||
| * | |||||
| * Although there is no semantics imposed on metadata keys and values, it is | |||||
| * much less useful to use it to associate highly structured data with a port | |||||
| * (or client), since this then implies the need for some (presumably | |||||
| * library-based) code to parse the structure and be able to use it. | |||||
| * | |||||
| * The real goal of the metadata API is to be able to tag ports (and clients) | |||||
| * with small amounts of data that is outside of the core JACK API but | |||||
| * nevertheless useful. | |||||
| */ | */ | ||||
| typedef struct { | typedef struct { | ||||
| /** The key of this property (URI string). */ | /** The key of this property (URI string). */ | ||||
| @@ -185,6 +194,18 @@ typedef enum { | |||||
| PropertyDeleted | PropertyDeleted | ||||
| } jack_property_change_t; | } jack_property_change_t; | ||||
| /** | |||||
| * Prototype for the client supplied function that is called by the | |||||
| * engine anytime a property or properties have been modified. | |||||
| * | |||||
| * Note that when the key is empty, it means all properties have been | |||||
| * modified. This is often used to indicate that the removal of all keys. | |||||
| * | |||||
| * @param subject The subject the change relates to, this can be either a client or port | |||||
| * @param key The key of the modified property (URI string) | |||||
| * @param change Wherever the key has been created, changed or deleted | |||||
| * @param arg pointer to a client supplied structure | |||||
| */ | |||||
| typedef void (*JackPropertyChangeCallback)(jack_uuid_t subject, | typedef void (*JackPropertyChangeCallback)(jack_uuid_t subject, | ||||
| const char* key, | const char* key, | ||||
| jack_property_change_t change, | jack_property_change_t change, | ||||
| @@ -204,19 +225,98 @@ int jack_set_property_change_callback (jack_client_t* client, | |||||
| JackPropertyChangeCallback callback, | JackPropertyChangeCallback callback, | ||||
| void* arg); | void* arg); | ||||
| #ifdef __cplusplus | |||||
| } /* namespace */ | |||||
| #endif | |||||
| /** | |||||
| * A value that identifies what the hardware port is connected to (an external | |||||
| * device of some kind). Possible values might be "E-Piano" or "Master 2 Track". | |||||
| */ | |||||
| extern const char* JACK_METADATA_CONNECTED; | |||||
| /** | /** | ||||
| * @} | |||||
| * The supported event types of an event port. | |||||
| * | |||||
| * This is a kludge around Jack only supporting MIDI, particularly for OSC. | |||||
| * This property is a comma-separated list of event types, currently "MIDI" or | |||||
| * "OSC". If this contains "OSC", the port may carry OSC bundles (first byte | |||||
| * '#') or OSC messages (first byte '/'). Note that the "status byte" of both | |||||
| * OSC events is not a valid MIDI status byte, so MIDI clients that check the | |||||
| * status byte will gracefully ignore OSC messages if the user makes an | |||||
| * inappropriate connection. | |||||
| */ | */ | ||||
| extern const char* JACK_METADATA_EVENT_TYPES; | |||||
| extern const char* JACK_METADATA_PRETTY_NAME; | |||||
| /** | |||||
| * A value that should be shown when attempting to identify the | |||||
| * specific hardware outputs of a client. Typical values might be | |||||
| * "ADAT1", "S/PDIF L" or "MADI 43". | |||||
| */ | |||||
| extern const char* JACK_METADATA_HARDWARE; | extern const char* JACK_METADATA_HARDWARE; | ||||
| extern const char* JACK_METADATA_CONNECTED; | |||||
| extern const char* JACK_METADATA_PORT_GROUP; | |||||
| extern const char* JACK_METADATA_ICON_SMALL; | |||||
| /** | |||||
| * A value with a MIME type of "image/png;base64" that is an encoding of an | |||||
| * NxN (with 32 < N <= 128) image to be used when displaying a visual | |||||
| * representation of that client or port. | |||||
| */ | |||||
| extern const char* JACK_METADATA_ICON_LARGE; | extern const char* JACK_METADATA_ICON_LARGE; | ||||
| /** | |||||
| * The name of the icon for the subject (typically client). | |||||
| * | |||||
| * This is used for looking up icons on the system, possibly with many sizes or | |||||
| * themes. Icons should be searched for according to the freedesktop Icon | |||||
| * | |||||
| * Theme Specification: | |||||
| * http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html | |||||
| */ | |||||
| extern const char* JACK_METADATA_ICON_NAME; | |||||
| /** | |||||
| * A value with a MIME type of "image/png;base64" that is an encoding of an | |||||
| * NxN (with N <=32) image to be used when displaying a visual representation | |||||
| * of that client or port. | |||||
| */ | |||||
| extern const char* JACK_METADATA_ICON_SMALL; | |||||
| /** | |||||
| * Order for a port. | |||||
| * | |||||
| * This is used to specify the best order to show ports in user interfaces. | |||||
| * The value MUST be an integer. There are no other requirements, so there may | |||||
| * be gaps in the orders for several ports. Applications should compare the | |||||
| * orders of ports to determine their relative order, but must not assign any | |||||
| * other relevance to order values. | |||||
| * | |||||
| * It is encouraged to use http://www.w3.org/2001/XMLSchema#int as the type. | |||||
| */ | |||||
| extern const char* JACK_METADATA_ORDER; | |||||
| /** | |||||
| * A value that should be shown to the user when displaying a port to the user, | |||||
| * unless the user has explicitly overridden that a request to show the port | |||||
| * name, or some other key value. | |||||
| */ | |||||
| extern const char* JACK_METADATA_PRETTY_NAME; | |||||
| /** | |||||
| */ | |||||
| extern const char* JACK_METADATA_PORT_GROUP; | |||||
| /** | |||||
| * The type of an audio signal. | |||||
| * | |||||
| * This property allows audio ports to be tagged with a "meaning". The value | |||||
| * is a simple string. Currently, the only type is "CV", for "control voltage" | |||||
| * ports. Hosts SHOULD be take care to not treat CV ports as audibile and send | |||||
| * their output directly to speakers. In particular, CV ports are not | |||||
| * necessarily periodic at all and may have very high DC. | |||||
| */ | |||||
| extern const char* JACK_METADATA_SIGNAL_TYPE; | |||||
| /** | |||||
| * @} | |||||
| */ | |||||
| #ifdef __cplusplus | |||||
| } /* namespace */ | |||||
| #endif | |||||
| #endif /* __jack_metadata_h__ */ | #endif /* __jack_metadata_h__ */ | ||||