2007-12-23 20:12:37 +00:00
# ifndef foopulseproplisthfoo
# define foopulseproplisthfoo
/***
This file is part of PulseAudio .
Copyright 2007 Lennart Poettering
PulseAudio is free software ; you can redistribute it and / or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation ; either version 2.1 of the
License , or ( at your option ) any later version .
PulseAudio is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public
License along with PulseAudio ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307
USA .
* * */
2008-06-16 18:43:18 +00:00
# include <sys/types.h>
2008-05-15 23:34:41 +00:00
# include <pulse/cdecl.h>
# include <pulse/gccmacro.h>
2009-01-27 02:36:42 +01:00
# include <pulse/version.h>
2008-05-15 23:34:41 +00:00
PA_C_DECL_BEGIN
2007-12-23 20:12:37 +00:00
2009-02-13 23:01:24 +01:00
/** For streams: localized media name, formatted as UTF-8. e.g. "Guns'N'Roses: Civil War".*/
2008-05-15 23:34:41 +00:00
# define PA_PROP_MEDIA_NAME "media.name"
2009-02-13 23:01:24 +01:00
/** For streams: localized media title if applicable, formatted as UTF-8. e.g. "Civil War" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_MEDIA_TITLE "media.title"
2009-02-13 23:01:24 +01:00
/** For streams: localized media artist if applicable, formatted as UTF-8. e.g. "Guns'N'Roses" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_MEDIA_ARTIST "media.artist"
2009-02-13 23:01:24 +01:00
/** For streams: media language if applicable, in standard POSIX format. e.g. "de_DE" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_MEDIA_LANGUAGE "media.language"
2009-02-13 23:01:24 +01:00
/** For streams: source filename if applicable, in URI format or local path. e.g. "/home/lennart/music/foobar.ogg" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_MEDIA_FILENAME "media.filename"
2009-02-13 23:01:24 +01:00
/** For streams: icon for the media. A binary blob containing PNG image data */
2008-05-15 23:34:41 +00:00
# define PA_PROP_MEDIA_ICON "media.icon"
2009-02-13 23:01:24 +01:00
/** For streams: an XDG icon name for the media. e.g. "audio-x-mp3" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_MEDIA_ICON_NAME "media.icon_name"
2009-02-13 23:01:24 +01:00
/** For streams: logic role of this media. One of the strings "video", "music", "game", "event", "phone", "animation", "production" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_MEDIA_ROLE "media.role"
2009-02-13 23:01:24 +01:00
/** For event sound streams: XDG event sound name. e.g. "message-new-email" (Event sound streams are those with media.role set to "event") */
2008-05-15 23:34:41 +00:00
# define PA_PROP_EVENT_ID "event.id"
2009-02-13 23:01:24 +01:00
/** For event sound streams: localized human readable one-line description of the event, formatted as UTF-8. e.g. "Email from lennart@example.com received." */
2008-07-21 18:55:17 +02:00
# define PA_PROP_EVENT_DESCRIPTION "event.description"
2009-02-13 23:01:24 +01:00
/** For event sound streams: absolute horizontal mouse position on the screen if the event sound was triggered by a mouse click, integer formatted as text string. e.g. "865" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_EVENT_MOUSE_X "event.mouse.x"
2009-02-13 23:01:24 +01:00
/** For event sound streams: absolute vertical mouse position on the screen if the event sound was triggered by a mouse click, integer formatted as text string. e.g. "432" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_EVENT_MOUSE_Y "event.mouse.y"
2009-02-13 23:01:24 +01:00
/** For event sound streams: relative horizontal mouse position on the screen if the event sound was triggered by a mouse click, float formatted as text string, ranging from 0.0 (left side of the screen) to 1.0 (right side of the screen). e.g. "0.65" */
2008-06-11 00:37:10 +00:00
# define PA_PROP_EVENT_MOUSE_HPOS "event.mouse.hpos"
2009-02-13 23:01:24 +01:00
/** For event sound streams: relative vertical mouse position on the screen if the event sound was triggered by a mouse click, float formatted as text string, ranging from 0.0 (top of the screen) to 1.0 (bottom of the screen). e.g. "0.43" */
2008-06-11 00:37:10 +00:00
# define PA_PROP_EVENT_MOUSE_VPOS "event.mouse.vpos"
2009-02-13 23:01:24 +01:00
/** For event sound streams: mouse button that triggered the event if applicable, integer formatted as string with 0=left, 1=middle, 2=right. e.g. "0" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_EVENT_MOUSE_BUTTON "event.mouse.button"
2009-02-13 23:01:24 +01:00
/** For streams that belong to a window on the screen: localized window title. e.g. "Totem Music Player" */
2008-05-29 15:17:18 +00:00
# define PA_PROP_WINDOW_NAME "window.name"
2009-02-13 23:01:24 +01:00
/** For streams that belong to a window on the screen: a textual id for identifying a window logically. e.g. "org.gnome.Totem.MainWindow" */
2008-05-29 15:17:18 +00:00
# define PA_PROP_WINDOW_ID "window.id"
2009-02-13 23:01:24 +01:00
/** For streams that belong to a window on the screen: window icon. A binary blob containing PNG image data */
2008-05-29 15:17:18 +00:00
# define PA_PROP_WINDOW_ICON "window.icon"
2009-02-13 23:01:24 +01:00
/** For streams that belong to a window on the screen: an XDG icon name for the window. e.g. "totem" */
2008-05-29 15:17:18 +00:00
# define PA_PROP_WINDOW_ICON_NAME "window.icon_name"
2009-02-13 23:01:24 +01:00
/** For streams that belong to an X11 window on the screen: the X11 display string. e.g. ":0.0" */
2008-05-29 15:17:18 +00:00
# define PA_PROP_WINDOW_X11_DISPLAY "window.x11.display"
2009-02-13 23:01:24 +01:00
/** For streams that belong to an X11 window on the screen: the X11 screen the window is on, an integer formatted as string. e.g. "0" */
2008-06-11 00:37:10 +00:00
# define PA_PROP_WINDOW_X11_SCREEN "window.x11.screen"
2009-02-13 23:01:24 +01:00
/** For streams that belong to an X11 window on the screen: the X11 monitor the window is on, an integer formatted as string. e.g. "0" */
2008-06-11 00:37:10 +00:00
# define PA_PROP_WINDOW_X11_MONITOR "window.x11.monitor"
2009-02-13 23:01:24 +01:00
/** For streams that belong to an X11 window on the screen: the window XID, an integer formatted as string. e.g. "25632" */
2008-05-29 15:17:18 +00:00
# define PA_PROP_WINDOW_X11_XID "window.x11.xid"
2009-02-13 23:01:24 +01:00
/** For clients/streams: localized human readable application name. e.g. "Totem Music Player" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_NAME "application.name"
2009-02-13 23:01:24 +01:00
/** For clients/streams: a textual id for identifying an application logically. e.g. "org.gnome.Totem" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_ID "application.id"
2009-02-13 23:01:24 +01:00
/** For clients/streams: a version string e.g. "0.6.88" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_VERSION "application.version"
2009-02-13 23:01:24 +01:00
/** For clients/streams: application icon. A binary blob containing PNG image data */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_ICON "application.icon"
2009-02-13 23:01:24 +01:00
/** For clients/streams: an XDG icon name for the application. e.g. "totem" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_ICON_NAME "application.icon_name"
2009-02-13 23:01:24 +01:00
/** For clients/streams: application language if applicable, in standard POSIX format. e.g. "de_DE" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_LANGUAGE "application.language"
2009-02-13 23:01:24 +01:00
/** For clients/streams on UNIX: application process PID, an integer formatted as string. e.g. "4711" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_PROCESS_ID "application.process.id"
2009-02-13 23:01:24 +01:00
/** For clients/streams: application process name. e.g. "totem" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_PROCESS_BINARY "application.process.binary"
2009-02-13 23:01:24 +01:00
/** For clients/streams: application user name. e.g. "lennart" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_PROCESS_USER "application.process.user"
2009-02-13 23:01:24 +01:00
/** For clients/streams: host name the application runs on. e.g. "omega" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_APPLICATION_PROCESS_HOST "application.process.host"
2009-02-13 23:01:24 +01:00
/** For clients/streams: the D-Bus host id the application runs on. e.g. "543679e7b01393ed3e3e650047d78f6e" */
2009-02-02 00:21:41 +01:00
# define PA_PROP_APPLICATION_PROCESS_MACHINE_ID "application.process.machine_id"
2009-02-13 23:01:24 +01:00
2009-02-21 16:26:09 +01:00
/** For clients/streams: an id for the login session the application runs in. On Unix the value of $XDG_SESSION_COOKIE. e.g. "543679e7b01393ed3e3e650047d78f6e-1235159798.76193-190367717" */
# define PA_PROP_APPLICATION_PROCESS_SESSION_ID "application.process.session_id"
2009-02-13 23:01:24 +01:00
/** For devices: device string in the underlying audio layer's format. e.g. "surround51:0" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_STRING "device.string"
2009-02-13 23:01:24 +01:00
/** For devices: API this device is access with. e.g. "alsa" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_API "device.api"
2009-02-13 23:01:24 +01:00
/** For devices: localized human readable device one-line description, e.g. "Foobar Industries USB Headset 2000+ Ultra" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_DESCRIPTION "device.description"
2009-02-13 23:01:24 +01:00
/** For devices: bus path to the device in the OS' format. e.g. "/sys/bus/pci/devices/0000:00:1f.2" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_BUS_PATH "device.bus_path"
2009-02-13 23:01:24 +01:00
/** For devices: serial number if applicable. e.g. "4711-0815-1234" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_SERIAL "device.serial"
2009-02-13 23:01:24 +01:00
/** For devices: vendor/product ID if applicable. e.g. 1274:1371 */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_VENDOR_PRODUCT_ID "device.vendor_product_id"
2009-02-13 23:01:24 +01:00
/** For devices: device class. One of "sound", "modem", "monitor", "filter" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_CLASS "device.class"
2009-02-13 23:01:24 +01:00
/** For devices: form factor if applicable. One of "laptop-speakers", "external-speakers", "telephone", "tv-capture", "webcam-capture", "microphone-capture", "headset", "headphones", "hands-free", "car", "hifi", "computer", "portable" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_FORM_FACTOR "device.form_factor"
2009-02-13 23:01:24 +01:00
/** For devices: connector of the device if applicable. One of "isa", "pci", "usb", "firewire", "bluetooth" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_CONNECTOR "device.connector"
2009-02-13 23:01:24 +01:00
/** For devices: access mode of the device if applicable. One of "mmap", "mmap_rewrite", "serial" */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_ACCESS_MODE "device.access_mode"
2009-02-13 23:01:24 +01:00
/** For filter devices: master device id if applicable. */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_MASTER_DEVICE "device.master_device"
2009-02-13 23:01:24 +01:00
/** For devices: buffer size in bytes, integer formatted as string.. */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE "device.buffering.buffer_size"
2009-02-13 23:01:24 +01:00
/** For devices: fragment size in bytes, integer formatted as string. */
2008-05-15 23:34:41 +00:00
# define PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE "device.buffering.fragment_size"
2009-02-13 23:01:24 +01:00
/** For devices: profile identifier for the profile this devices is in. e.g. "analog-stereo", "analog-surround-40", "iec958-stereo", ...*/
2009-01-15 23:46:42 +01:00
# define PA_PROP_DEVICE_PROFILE_NAME "device.profile.name"
2009-02-13 23:01:24 +01:00
/** For devices: human readable one-line description of the profile this device is in. e.g. "Analog Stereo", ... */
2009-01-15 23:46:42 +01:00
# define PA_PROP_DEVICE_PROFILE_DESCRIPTION "device.profile.description"
2009-02-13 23:01:24 +01:00
/** For modules: the author's name, formatted as UTF-8 string. e.g. "Lennart Poettering" */
2009-01-19 22:02:28 +01:00
# define PA_PROP_MODULE_AUTHOR "module.author"
2009-02-13 23:01:24 +01:00
/** For modules: a human readable one-line description of the module's purpose formatted as UTF-8. e.g. "Frobnicate sounds with a flux compensator" */
2009-01-19 22:02:28 +01:00
# define PA_PROP_MODULE_DESCRIPTION "module.description"
2009-02-13 23:01:24 +01:00
/** For modules: a human readable usage description of the module's arguments formatted as UTF-8. */
2009-01-19 22:02:28 +01:00
# define PA_PROP_MODULE_USAGE "module.usage"
2009-02-13 23:01:24 +01:00
/** For modules: a version string for the module. e.g. "0.9.15" */
2009-01-19 22:02:28 +01:00
# define PA_PROP_MODULE_VERSION "module.version"
2008-05-15 23:34:41 +00:00
2009-02-04 17:14:59 +01:00
/** A property list object. Basically a dictionary with ASCII strings
2008-05-15 23:34:41 +00:00
* as keys and arbitrary data as values . \ since 0.9 .11 */
2007-12-23 20:12:37 +00:00
typedef struct pa_proplist pa_proplist ;
2008-05-15 23:34:41 +00:00
/** Allocate a property list. \since 0.9.11 */
2007-12-23 20:12:37 +00:00
pa_proplist * pa_proplist_new ( void ) ;
2008-05-15 23:34:41 +00:00
/** Free the property list. \since 0.9.11 */
void pa_proplist_free ( pa_proplist * p ) ;
2007-12-23 20:12:37 +00:00
2008-05-15 23:34:41 +00:00
/** Append a new string entry to the property list, possibly
* overwriting an already existing entry with the same key . An
* internal copy of the data passed is made . Will accept only valid
* UTF - 8. \ since 0.9 .11 */
int pa_proplist_sets ( pa_proplist * p , const char * key , const char * value ) ;
/** Append a new string entry to the property list, possibly
* overwriting an already existing entry with the same key . An
* internal copy of the data passed is made . Will accept only valid
* UTF - 8. The data can be passed as printf ( ) - style format string with
* arguments . \ since 0.9 .11 */
int pa_proplist_setf ( pa_proplist * p , const char * key , const char * format , . . . ) PA_GCC_PRINTF_ATTR ( 3 , 4 ) ;
/** Append a new arbitrary data entry to the property list, possibly
* overwriting an already existing entry with the same key . An
* internal copy of the data passed is made . \ since 0.9 .11 */
int pa_proplist_set ( pa_proplist * p , const char * key , const void * data , size_t nbytes ) ;
2009-01-27 02:37:13 +01:00
/** Return a string entry for the specified key. Will return NULL if
2008-05-15 23:34:41 +00:00
* the data is not valid UTF - 8. Will return a NUL - terminated string in
* an internally allocated buffer . The caller should make a copy of
* the data before accessing the property list again . \ since 0.9 .11 */
2007-12-23 20:12:37 +00:00
const char * pa_proplist_gets ( pa_proplist * p , const char * key ) ;
2008-05-15 23:34:41 +00:00
/** Return the the value for the specified key. Will return a
* NUL - terminated string for string entries . The pointer returned will
* point to an internally allocated buffer . The caller should make a
* copy of the data before the property list is accessed again . \ since
* 0.9 .11 */
int pa_proplist_get ( pa_proplist * p , const char * key , const void * * data , size_t * nbytes ) ;
2007-12-23 20:12:37 +00:00
2008-05-15 23:34:41 +00:00
/** Update mode enum for pa_proplist_update(). \since 0.9.11 */
typedef enum pa_update_mode {
2009-02-13 23:01:24 +01:00
PA_UPDATE_SET
/**< Replace the entirey property list with the new one. Don't keep
* any of the old data around */ ,
2008-09-03 18:51:46 +02:00
2009-02-13 23:01:24 +01:00
PA_UPDATE_MERGE
/**< Merge new property list into the existing one, not replacing
2008-09-03 18:51:46 +02:00
* any old entries if they share a common key with the new
2009-02-13 23:01:24 +01:00
* property list . */ ,
2008-09-03 18:51:46 +02:00
PA_UPDATE_REPLACE
2009-02-13 23:01:24 +01:00
/**< Merge new property list into the existing one, replacing all
2008-09-03 18:51:46 +02:00
* old entries that share a common key with the new property
* list . */
2008-05-15 23:34:41 +00:00
} pa_update_mode_t ;
2009-02-06 02:01:17 +01:00
/** \cond fulldocs */
# define PA_UPDATE_SET PA_UPDATE_SET
# define PA_UPDATE_MERGE PA_UPDATE_MERGE
# define PA_UPDATE_REPLACE PA_UPDATE_REPLACE
/** \endcond */
2008-05-15 23:34:41 +00:00
/** Merge property list "other" into "p", adhering the merge mode as
* specified in " mode " . \ since 0.9 .11 */
void pa_proplist_update ( pa_proplist * p , pa_update_mode_t mode , pa_proplist * other ) ;
/** Removes a single entry from the property list, identified be the
* specified key name . \ since 0.9 .11 */
int pa_proplist_unset ( pa_proplist * p , const char * key ) ;
/** Similar to pa_proplist_remove() but takes an array of keys to
* remove . The array should be terminated by a NULL pointer . Return - 1
* on failure , otherwise the number of entries actually removed ( which
* might even be 0 , if there where no matching entries to
* remove ) . \ since 0.9 .11 */
int pa_proplist_unset_many ( pa_proplist * p , const char * const keys [ ] ) ;
/** Iterate through the property list. The user should allocate a
* state variable of type void * and initialize it with NULL . A pointer
* to this variable should then be passed to pa_proplist_iterate ( )
* which should be called in a loop until it returns NULL which
* signifies EOL . The property list should not be modified during
2008-05-29 15:17:18 +00:00
* iteration through the list - - except for deleting the current
* looked at entry . On each invication this function will return the
* key string for the next entry . The keys in the property list do not
* have any particular order . \ since 0.9 .11 */
2007-12-23 20:12:37 +00:00
const char * pa_proplist_iterate ( pa_proplist * p , void * * state ) ;
2009-01-17 01:59:37 +01:00
/** Format the property list nicely as a human readable string. This
* works very much like pa_proplist_to_string_sep ( ) and uses a newline
* as seperator and appends one final one . Call pa_xfree ( ) on the
* result . \ since 0.9 .11 */
2007-12-23 20:12:37 +00:00
char * pa_proplist_to_string ( pa_proplist * p ) ;
2009-01-17 01:59:37 +01:00
/** Format the property list nicely as a human readable string and
* choose the seperator . Call pa_xfree ( ) on the result . \ since
2009-01-14 00:05:54 +01:00
* 0.9 .15 */
2009-01-17 01:59:37 +01:00
char * pa_proplist_to_string_sep ( pa_proplist * p , const char * sep ) ;
/** Allocate a new property list and assign key/value from a human
* readable string . \ since 0.9 .15 */
2008-10-27 21:14:50 +02:00
pa_proplist * pa_proplist_from_string ( const char * str ) ;
/** Returns 1 if an entry for the specified key is existant in the
2008-05-15 23:34:41 +00:00
* property list . \ since 0.9 .11 */
2007-12-29 18:03:53 +00:00
int pa_proplist_contains ( pa_proplist * p , const char * key ) ;
2008-05-15 23:34:41 +00:00
/** Remove all entries from the property list object. \since 0.9.11 */
void pa_proplist_clear ( pa_proplist * p ) ;
/** Allocate a new property list and copy over every single entry from
* the specific list . \ since 0.9 .11 */
pa_proplist * pa_proplist_copy ( pa_proplist * t ) ;
2009-01-14 00:06:26 +01:00
/** Return the number of entries on the property list. \since 0.9.15 */
unsigned pa_proplist_size ( pa_proplist * t ) ;
/** Returns 0 when the proplist is empty, positive otherwise \since 0.9.15 */
int pa_proplist_isempty ( pa_proplist * t ) ;
2008-05-15 23:34:41 +00:00
PA_C_DECL_END
2007-12-23 20:12:37 +00:00
# endif