1 // Copyright 2017 Lyndon Brown 2 // 3 // This file is part of the PulseAudio Rust language linking library. 4 // 5 // Licensed under the MIT license or the Apache license (version 2.0), at your option. You may not 6 // copy, modify, or distribute this file except in compliance with said license. You can find copies 7 // of these licenses either in the LICENSE-MIT and LICENSE-APACHE files, or alternatively at 8 // <http://opensource.org/licenses/MIT> and <http://www.apache.org/licenses/LICENSE-2.0> 9 // respectively. 10 // 11 // Portions of documentation are copied from the LGPL 2.1+ licensed PulseAudio C headers on a 12 // fair-use basis, as discussed in the overall project readme (available in the git repository). 13 14 //! Property list constants and functions. 15 16 use std::os::raw::{c_char, c_void}; 17 use num_derive::{FromPrimitive, ToPrimitive}; 18 19 /// For streams: localized media name, formatted as UTF-8. E.g. "Guns'N'Roses: Civil War". 20 pub const PA_PROP_MEDIA_NAME: &str = "media.name"; 21 22 /// For streams: localized media title if applicable, formatted as UTF-8. E.g. "Civil War". 23 pub const PA_PROP_MEDIA_TITLE: &str = "media.title"; 24 25 /// For streams: localized media artist if applicable, formatted as UTF-8. E.g. "Guns'N'Roses". 26 pub const PA_PROP_MEDIA_ARTIST: &str = "media.artist"; 27 28 /// For streams: localized media copyright string if applicable, formatted as UTF-8. 29 /// E.g. "Evil Record Corp.". 30 pub const PA_PROP_MEDIA_COPYRIGHT: &str = "media.copyright"; 31 32 /// For streams: localized media generator software string if applicable, formatted as UTF-8. 33 /// E.g. "Foocrop AudioFrobnicator". 34 pub const PA_PROP_MEDIA_SOFTWARE: &str = "media.software"; 35 36 /// For streams: media language if applicable, in standard POSIX format. E.g. "de_DE". 37 pub const PA_PROP_MEDIA_LANGUAGE: &str = "media.language"; 38 39 /// For streams: source filename if applicable, in URI format or local path. 40 /// E.g. "/home/lennart/music/foobar.ogg". 41 pub const PA_PROP_MEDIA_FILENAME: &str = "media.filename"; 42 43 /// For streams: icon for the media. A binary blob containing PNG image data. 44 pub const PA_PROP_MEDIA_ICON: &str = "media.icon"; 45 46 /// For streams: an XDG icon name for the media. E.g. "audio-x-mp3". 47 pub const PA_PROP_MEDIA_ICON_NAME: &str = "media.icon_name"; 48 49 /// For streams: logic role of this media. 50 /// One of the strings "video", "music", "game", "event", "phone", "animation", "production", 51 /// "a11y", "test". 52 pub const PA_PROP_MEDIA_ROLE: &str = "media.role"; 53 54 /// For streams: the name of a filter that is desired, e.g. "echo-cancel" or "equalizer-sink". 55 /// PulseAudio may choose to not apply the filter if it does not make sense (for example, applying 56 /// echo-cancellation on a Bluetooth headset probably does not make sense. 57 pub const PA_PROP_FILTER_WANT: &str = "filter.want"; 58 59 /// For streams: the name of a filter that is desired, e.g. "echo-cancel" or "equalizer-sink". 60 /// Differs from PA_PROP_FILTER_WANT in that it forces PulseAudio to apply the filter, regardless of 61 /// whether PulseAudio thinks it makes sense to do so or not. If this is set, PA_PROP_FILTER_WANT 62 /// is ignored. In other words, you almost certainly do not want to use this. 63 pub const PA_PROP_FILTER_APPLY: &str = "filter.apply"; 64 65 /// For streams: the name of a filter that should specifically be suppressed (i.e. overrides 66 /// PA_PROP_FILTER_WANT). Useful for the times that PA_PROP_FILTER_WANT is automatically added (e.g. 67 /// echo-cancellation for phone streams when $VOIP_APP does its own, internal AEC). 68 pub const PA_PROP_FILTER_SUPPRESS: &str = "filter.suppress"; 69 70 /// For event sound streams: XDG event sound name. e.g. "message-new-email" (Event sound streams are 71 /// those with media.role set to "event"). 72 pub const PA_PROP_EVENT_ID: &str = "event.id"; 73 74 /// For event sound streams: localized human readable one-line description of the event, formatted 75 /// as UTF-8. E.g. "Email from lennart\@example.com received." 76 pub const PA_PROP_EVENT_DESCRIPTION: &str = "event.description"; 77 78 /// For event sound streams: absolute horizontal mouse position on the screen if the event sound was 79 /// triggered by a mouse click, integer formatted as text string. E.g. "865". 80 pub const PA_PROP_EVENT_MOUSE_X: &str = "event.mouse.x"; 81 82 /// For event sound streams: absolute vertical mouse position on the screen if the event sound was 83 /// triggered by a mouse click, integer formatted as text string. E.g. "432". 84 pub const PA_PROP_EVENT_MOUSE_Y: &str = "event.mouse.y"; 85 86 /// For event sound streams: relative horizontal mouse position on the screen if the event sound was 87 /// triggered by a mouse click, float formatted as text string, ranging from 0.0 (left side of the 88 /// screen) to 1.0 (right side of the screen). E.g. "0.65". 89 pub const PA_PROP_EVENT_MOUSE_HPOS: &str = "event.mouse.hpos"; 90 91 /// For event sound streams: relative vertical mouse position on the screen if the event sound was 92 /// triggered by a mouse click, float formatted as text string, ranging from 0.0 (top of the screen) 93 /// to 1.0 (bottom of the screen). E.g. "0.43". 94 pub const PA_PROP_EVENT_MOUSE_VPOS: &str = "event.mouse.vpos"; 95 96 /// For event sound streams: mouse button that triggered the event if applicable, integer formatted 97 /// as string with 0=left, 1=middle, 2=right. E.g. "0". 98 pub const PA_PROP_EVENT_MOUSE_BUTTON: &str = "event.mouse.button"; 99 100 /// For streams that belong to a window on the screen: localized window title. 101 /// E.g. "Totem Music Player". 102 pub const PA_PROP_WINDOW_NAME: &str = "window.name"; 103 104 /// For streams that belong to a window on the screen: a textual id for identifying a window 105 /// logically. E.g. "org.gnome.Totem.MainWindow". 106 pub const PA_PROP_WINDOW_ID: &str = "window.id"; 107 108 /// For streams that belong to a window on the screen: window icon. A binary blob containing PNG 109 /// image data. 110 pub const PA_PROP_WINDOW_ICON: &str = "window.icon"; 111 112 /// For streams that belong to a window on the screen: an XDG icon name for the window. E.g. 113 /// "totem". 114 pub const PA_PROP_WINDOW_ICON_NAME: &str = "window.icon_name"; 115 116 /// For streams that belong to a window on the screen: absolute horizontal window position on the 117 /// screen, integer formatted as text string. E.g. "865". 118 pub const PA_PROP_WINDOW_X: &str = "window.x"; 119 120 /// For streams that belong to a window on the screen: absolute vertical window position on the 121 /// screen, integer formatted as text string. E.g. "343". 122 pub const PA_PROP_WINDOW_Y: &str = "window.y"; 123 124 /// For streams that belong to a window on the screen: window width on the screen, integer 125 /// formatted as text string. e.g. "365". 126 pub const PA_PROP_WINDOW_WIDTH: &str = "window.width"; 127 128 /// For streams that belong to a window on the screen: window height on the screen, integer 129 /// formatted as text string. E.g. "643". 130 pub const PA_PROP_WINDOW_HEIGHT: &str = "window.height"; 131 132 /// For streams that belong to a window on the screen: relative position of the window center on the 133 /// screen, float formatted as text string, ranging from 0.0 (left side of the screen) to 1.0 (right 134 /// side of the screen). E.g. "0.65". 135 pub const PA_PROP_WINDOW_HPOS: &str = "window.hpos"; 136 137 /// For streams that belong to a window on the screen: relative position of the window center on the 138 /// screen, float formatted as text string, ranging from 0.0 (top of the screen) to 1.0 (bottom of 139 /// the screen). E.g. "0.43". 140 pub const PA_PROP_WINDOW_VPOS: &str = "window.vpos"; 141 142 /// For streams that belong to a window on the screen: if the windowing system supports multiple 143 /// desktops, a comma separated list of indexes of the desktops this window is visible on. If this 144 /// property is an empty string, it is visible on all desktops (i.e. ‘sticky’). The first desktop is 145 /// zero. E.g. "0,2,3". 146 pub const PA_PROP_WINDOW_DESKTOP: &str = "window.desktop"; 147 148 /// For streams that belong to an X11 window on the screen: the X11 display string. E.g. ":0.0". 149 pub const PA_PROP_WINDOW_X11_DISPLAY: &str = "window.x11.display"; 150 151 /// For streams that belong to an X11 window on the screen: the X11 screen the window is on, an 152 /// integer formatted as string. E.g. "0". 153 pub const PA_PROP_WINDOW_X11_SCREEN: &str = "window.x11.screen"; 154 155 /// For streams that belong to an X11 window on the screen: the X11 monitor the window is on, an 156 /// integer formatted as string. E.g. "0". 157 pub const PA_PROP_WINDOW_X11_MONITOR: &str = "window.x11.monitor"; 158 159 /// For streams that belong to an X11 window on the screen: the window XID, an integer formatted as 160 /// string. E.g. "25632". 161 pub const PA_PROP_WINDOW_X11_XID: &str = "window.x11.xid"; 162 163 /// For clients/streams: localized human readable application name. E.g. "Totem Music Player". 164 pub const PA_PROP_APPLICATION_NAME: &str = "application.name"; 165 166 /// For clients/streams: a textual id for identifying an application logically. 167 /// E.g. "org.gnome.Totem". 168 pub const PA_PROP_APPLICATION_ID: &str = "application.id"; 169 170 /// For clients/streams: a version string, e.g. "0.6.88". 171 pub const PA_PROP_APPLICATION_VERSION: &str = "application.version"; 172 173 /// For clients/streams: application icon. A binary blob containing PNG image data. 174 pub const PA_PROP_APPLICATION_ICON: &str = "application.icon"; 175 176 /// For clients/streams: an XDG icon name for the application. E.g. "totem". 177 pub const PA_PROP_APPLICATION_ICON_NAME: &str = "application.icon_name"; 178 179 /// For clients/streams: application language if applicable, in standard POSIX format. E.g. "de_DE". 180 pub const PA_PROP_APPLICATION_LANGUAGE: &str = "application.language"; 181 182 /// For clients/streams on UNIX: application process PID, an integer formatted as string. E.g. 183 /// "4711". 184 pub const PA_PROP_APPLICATION_PROCESS_ID: &str = "application.process.id"; 185 186 /// For clients/streams: application process name. E.g. "totem". 187 pub const PA_PROP_APPLICATION_PROCESS_BINARY: &str = "application.process.binary"; 188 189 /// For clients/streams: application user name. E.g. "lennart". 190 pub const PA_PROP_APPLICATION_PROCESS_USER: &str = "application.process.user"; 191 192 /// For clients/streams: host name the application runs on. E.g. "omega". 193 pub const PA_PROP_APPLICATION_PROCESS_HOST: &str = "application.process.host"; 194 195 /// For clients/streams: the D-Bus host id the application runs on. 196 /// E.g. "543679e7b01393ed3e3e650047d78f6e". 197 pub const PA_PROP_APPLICATION_PROCESS_MACHINE_ID: &str = "application.process.machine_id"; 198 199 /// For clients/streams: an id for the login session the application runs in. On Unix the value of 200 /// $XDG_SESSION_ID. E.g. "5". 201 pub const PA_PROP_APPLICATION_PROCESS_SESSION_ID: &str = "application.process.session_id"; 202 203 /// For devices: device string in the underlying audio layer’s format. E.g. "surround51:0". 204 pub const PA_PROP_DEVICE_STRING: &str = "device.string"; 205 206 /// For devices: API this device is accessed with. E.g. "alsa". 207 pub const PA_PROP_DEVICE_API: &str = "device.api"; 208 209 /// For devices: localized human readable device one-line description. 210 /// E.g. "Foobar Industries USB Headset 2000+ Ultra". 211 pub const PA_PROP_DEVICE_DESCRIPTION: &str = "device.description"; 212 213 /// For devices: bus path to the device in the OS’ format. 214 /// E.g. "/sys/bus/pci/devices/0000:00:1f.2". 215 pub const PA_PROP_DEVICE_BUS_PATH: &str = "device.bus_path"; 216 217 /// For devices: serial number if applicable. E.g. "4711-0815-1234". 218 pub const PA_PROP_DEVICE_SERIAL: &str = "device.serial"; 219 220 /// For devices: vendor ID if applicable. E.g. 1274. 221 pub const PA_PROP_DEVICE_VENDOR_ID: &str = "device.vendor.id"; 222 223 /// For devices: vendor name if applicable. E.g. "Foocorp Heavy Industries". 224 pub const PA_PROP_DEVICE_VENDOR_NAME: &str = "device.vendor.name"; 225 226 /// For devices: product ID if applicable. E.g. 4565. 227 pub const PA_PROP_DEVICE_PRODUCT_ID: &str = "device.product.id"; 228 229 /// For devices: product name if applicable. E.g. "SuperSpeakers 2000 Pro". 230 pub const PA_PROP_DEVICE_PRODUCT_NAME: &str = "device.product.name"; 231 232 /// For devices: device class. One of "sound", "modem", "monitor", "filter". 233 pub const PA_PROP_DEVICE_CLASS: &str = "device.class"; 234 235 /// For devices: form factor if applicable. One of "internal", "speaker", "handset", "tv", "webcam", 236 /// "microphone", "headset", "headphone", "hands-free", "car", "hifi", "computer", "portable". 237 pub const PA_PROP_DEVICE_FORM_FACTOR: &str = "device.form_factor"; 238 239 /// For devices: bus of the device if applicable. One of "isa", "pci", "usb", "firewire", 240 /// "bluetooth". 241 pub const PA_PROP_DEVICE_BUS: &str = "device.bus"; 242 243 /// For devices: icon for the device. A binary blob containing PNG image data. 244 pub const PA_PROP_DEVICE_ICON: &str = "device.icon"; 245 246 /// For devices: an XDG icon name for the device. E.g. "sound-card-speakers-usb". 247 pub const PA_PROP_DEVICE_ICON_NAME: &str = "device.icon_name"; 248 249 /// For devices: access mode of the device if applicable. One of "mmap", "mmap_rewrite", "serial". 250 pub const PA_PROP_DEVICE_ACCESS_MODE: &str = "device.access_mode"; 251 252 /// For filter devices: master device id if applicable. 253 pub const PA_PROP_DEVICE_MASTER_DEVICE: &str = "device.master_device"; 254 255 /// For devices: buffer size in bytes, integer formatted as string. 256 pub const PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE: &str = "device.buffering.buffer_size"; 257 258 /// For devices: fragment size in bytes, integer formatted as string. 259 pub const PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE: &str = "device.buffering.fragment_size"; 260 261 /// For devices: profile identifier for the profile this devices is in. 262 /// E.g. "analog-stereo", "analog-surround-40", "iec958-stereo", ... 263 pub const PA_PROP_DEVICE_PROFILE_NAME: &str = "device.profile.name"; 264 265 /// For devices: intended use. A space separated list of roles (see PA_PROP_MEDIA_ROLE) this device 266 /// is particularly well suited for, due to latency, quality or form factor. 267 pub const PA_PROP_DEVICE_INTENDED_ROLES: &str = "device.intended_roles"; 268 269 /// For devices: human readable one-line description of the profile this device is in. E.g. 270 /// "Analog Stereo", ... 271 pub const PA_PROP_DEVICE_PROFILE_DESCRIPTION: &str = "device.profile.description"; 272 273 /// For modules: the author’s name, formatted as UTF-8 string. E.g. "Lennart Poettering". 274 pub const PA_PROP_MODULE_AUTHOR: &str = "module.author"; 275 276 /// For modules: a human readable one-line description of the module’s purpose formatted as UTF-8. 277 /// E.g. "Frobnicate sounds with a flux compensator". 278 pub const PA_PROP_MODULE_DESCRIPTION: &str = "module.description"; 279 280 /// For modules: a human readable usage description of the module’s arguments formatted as UTF-8. 281 pub const PA_PROP_MODULE_USAGE: &str = "module.usage"; 282 283 /// For modules: a version string for the module. E.g. "0.9.15". 284 pub const PA_PROP_MODULE_VERSION: &str = "module.version"; 285 286 /// For PCM formats: the sample format used as returned by `pa_sample_format_to_string`. 287 pub const PA_PROP_FORMAT_SAMPLE_FORMAT: &str = "format.sample_format"; 288 289 /// For all formats: the sample rate (unsigned integer). 290 pub const PA_PROP_FORMAT_RATE: &str = "format.rate"; 291 292 /// For all formats: the number of channels (unsigned integer). 293 pub const PA_PROP_FORMAT_CHANNELS: &str = "format.channels"; 294 295 /// For PCM formats: the channel map of the stream as returned by `pa_channel_map_snprint`. 296 pub const PA_PROP_FORMAT_CHANNEL_MAP: &str = "format.channel_map"; 297 298 /// For context: whether to forcefully disable data transfer via POSIX or memfd shared memory. 299 /// This property overrides any other client configuration which would otherwise enable SHM 300 /// communication channels. 301 //TODO: enable this feature gate once the passing of `--cfg doc` to dependencies is fixed (https://github.com/rust-lang/cargo/issues/8811) 302 //#[cfg(any(doc, feature = "pa_v15"))] 303 #[cfg_attr(docsrs, doc(cfg(feature = "pa_v15")))] 304 pub const PA_PROP_CONTEXT_FORCE_DISABLE_SHM: &str = "context.force.disable.shm"; 305 306 /// For a bluez device: the currently selected codec name. 307 //TODO: enable this feature gate once the passing of `--cfg doc` to dependencies is fixed (https://github.com/rust-lang/cargo/issues/8811) 308 //#[cfg(any(doc, feature = "pa_v15"))] 309 #[cfg_attr(docsrs, doc(cfg(feature = "pa_v15")))] 310 pub const PA_PROP_BLUETOOTH_CODEC: &str = "bluetooth.codec"; 311 312 /// A property list object. Basically a dictionary with ASCII strings as keys and arbitrary data as 313 /// values. 314 #[repr(C)] pub struct pa_proplist { _private: [u8; 0] } 315 316 /// Update mode. 317 #[repr(C)] 318 #[derive(Debug, Copy, Clone, PartialEq, Eq)] 319 #[derive(FromPrimitive, ToPrimitive)] 320 pub enum pa_update_mode_t { 321 /// Replace the entire property list with the new one. Don’t keep any of the old data around. 322 Set, 323 324 /// Merge new property list into the existing one, not replacing any old entries if they share a 325 /// common key with the new property list. 326 Merge, 327 328 /// Merge new property list into the existing one, replacing all old entries that share a common 329 /// key with the new property list. 330 Replace, 331 } 332 333 pub const PA_UPDATE_SET: pa_update_mode_t = pa_update_mode_t::Set; 334 pub const PA_UPDATE_MERGE: pa_update_mode_t = pa_update_mode_t::Merge; 335 pub const PA_UPDATE_REPLACE: pa_update_mode_t = pa_update_mode_t::Replace; 336 337 #[rustfmt::skip] 338 #[link(name = "pulse")] 339 extern "C" { pa_proplist_new() -> *mut pa_proplist340 pub fn pa_proplist_new() -> *mut pa_proplist; pa_proplist_free(p: *mut pa_proplist)341 pub fn pa_proplist_free(p: *mut pa_proplist); pa_proplist_key_valid(key: *const c_char) -> i32342 pub fn pa_proplist_key_valid(key: *const c_char) -> i32; pa_proplist_sets(p: *mut pa_proplist, key: *const c_char, value: *const c_char) -> i32343 pub fn pa_proplist_sets(p: *mut pa_proplist, key: *const c_char, value: *const c_char) -> i32; pa_proplist_setp(p: *mut pa_proplist, pair: *const c_char) -> i32344 pub fn pa_proplist_setp(p: *mut pa_proplist, pair: *const c_char) -> i32; pa_proplist_setf(p: *mut pa_proplist, key: *const c_char, format: *const c_char, ...) -> i32345 pub fn pa_proplist_setf(p: *mut pa_proplist, key: *const c_char, format: *const c_char, ...) -> i32; pa_proplist_set(p: *mut pa_proplist, key: *const c_char, data: *const c_void, nbytes: usize) -> i32346 pub fn pa_proplist_set(p: *mut pa_proplist, key: *const c_char, data: *const c_void, nbytes: usize) -> i32; pa_proplist_gets(p: *const pa_proplist, key: *const c_char) -> *const c_char347 pub fn pa_proplist_gets(p: *const pa_proplist, key: *const c_char) -> *const c_char; pa_proplist_get(p: *const pa_proplist, key: *const c_char, data: *mut *const c_void, nbytes: *mut usize) -> i32348 pub fn pa_proplist_get(p: *const pa_proplist, key: *const c_char, data: *mut *const c_void, nbytes: *mut usize) -> i32; pa_proplist_update(p: *mut pa_proplist, mode: pa_update_mode_t, other: *const pa_proplist)349 pub fn pa_proplist_update(p: *mut pa_proplist, mode: pa_update_mode_t, other: *const pa_proplist); pa_proplist_unset(p: *mut pa_proplist, key: *const c_char) -> i32350 pub fn pa_proplist_unset(p: *mut pa_proplist, key: *const c_char) -> i32; pa_proplist_unset_many(p: *mut pa_proplist, keys: *const *const c_char) -> i32351 pub fn pa_proplist_unset_many(p: *mut pa_proplist, keys: *const *const c_char) -> i32; pa_proplist_iterate(p: *const pa_proplist, state: *mut *mut c_void) -> *const c_char352 pub fn pa_proplist_iterate(p: *const pa_proplist, state: *mut *mut c_void) -> *const c_char; pa_proplist_to_string(p: *const pa_proplist) -> *mut c_char353 pub fn pa_proplist_to_string(p: *const pa_proplist) -> *mut c_char; pa_proplist_to_string_sep(p: *const pa_proplist, sep: *const c_char) -> *mut c_char354 pub fn pa_proplist_to_string_sep(p: *const pa_proplist, sep: *const c_char) -> *mut c_char; pa_proplist_from_string(s: *const c_char) -> *mut pa_proplist355 pub fn pa_proplist_from_string(s: *const c_char) -> *mut pa_proplist; pa_proplist_contains(p: *const pa_proplist, key: *const c_char) -> i32356 pub fn pa_proplist_contains(p: *const pa_proplist, key: *const c_char) -> i32; pa_proplist_clear(p: *mut pa_proplist)357 pub fn pa_proplist_clear(p: *mut pa_proplist); pa_proplist_copy(p: *const pa_proplist) -> *mut pa_proplist358 pub fn pa_proplist_copy(p: *const pa_proplist) -> *mut pa_proplist; pa_proplist_size(p: *const pa_proplist) -> u32359 pub fn pa_proplist_size(p: *const pa_proplist) -> u32; pa_proplist_isempty(p: *const pa_proplist) -> i32360 pub fn pa_proplist_isempty(p: *const pa_proplist) -> i32; pa_proplist_equal(a: *const pa_proplist, b: *const pa_proplist) -> i32361 pub fn pa_proplist_equal(a: *const pa_proplist, b: *const pa_proplist) -> i32; 362 } 363