summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pulseaudio.vapi1463
-rw-r--r--src/pulse/context.h1
-rw-r--r--src/pulse/introspect.h12
-rw-r--r--src/pulse/sample.h7
-rw-r--r--src/pulse/scache.c14
-rw-r--r--src/pulse/scache.h4
-rw-r--r--src/pulse/stream.h2
-rw-r--r--src/pulse/volume.c52
-rw-r--r--src/pulse/volume.h9
-rw-r--r--src/pulsecore/cli-command.c12
-rw-r--r--src/pulsecore/core-scache.c4
-rw-r--r--src/pulsecore/memblock.c2
-rw-r--r--src/pulsecore/vector.h3
-rw-r--r--src/utils/pactl.c4
14 files changed, 1539 insertions, 50 deletions
diff --git a/pulseaudio.vapi b/pulseaudio.vapi
new file mode 100644
index 00000000..cf0e82e0
--- /dev/null
+++ b/pulseaudio.vapi
@@ -0,0 +1,1463 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 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
+ 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.
+***/
+
+using GLib;
+using Posix;
+
+[CCode (cheader_filename="pulse/pulseaudio.h")]
+namespace Pulse {
+
+ [CCode (cname="pa_get_library_version")]
+ public unowned string get_library_version();
+
+ [CCode (cname="PA_API_VERSION")]
+ public const int API_VERSION;
+
+ [CCode (cname="PA_PROTOCOL_VERSION")]
+ public const int PROTOCOL_VERSION;
+
+ [CCode (cname="PA_MAJOR")]
+ public const int MAJOR;
+
+ [CCode (cname="PA_MINOR")]
+ public const int MINOR;
+
+ [CCode (cname="PA_MICRO")]
+ public const int MICRO;
+
+ [CCode (cname="PA_CHECK_VERSION")]
+ public bool CHECK_VERSION(int major, int minor, int micro);
+
+ [CCode (cname="INVALID_INDEX")]
+ public const uint32 INVALID_INDEX;
+
+ [CCode (cname="pa_free_cb_t")]
+ public delegate void FreeCb(void *p);
+
+ [CCode (cname="pa_sample_format_t", cprefix="PA_SAMPLE_")]
+ public enum SampleFormat {
+ U8,
+ ALAW,
+ ULAW,
+ S16LE,
+ S16BE,
+ FLOAT32LE,
+ FLOAT32BE,
+ S32LE,
+ S32BE,
+ S24LE,
+ S24BE,
+ S24_32LE,
+ S24_32BE,
+ MAX,
+ S16NE,
+ S16RE,
+ FLOAT32NE,
+ FLOAT32RE,
+ S32NE,
+ S32RE,
+ S24NE,
+ S24RE,
+ S24_32NE,
+ S24_32RE;
+
+ [CCode (cname="pa_sample_size_of_format")]
+ public size_t size();
+
+ [CCode (cname="pa_sample_format_to_string")]
+ public unowned string? to_string();
+
+ [CCode (cname="pa_sample_format_is_le")]
+ public int is_le();
+
+ [CCode (cname="pa_sample_format_is_be")]
+ public int is_be();
+
+ [CCode (cname="pa_sample_format_is_ne")]
+ public int is_ne();
+
+ [CCode (cname="pa_sample_format_is_re")]
+ public int is_re();
+
+ [CCode (cname="pa_parse_sample_format")]
+ public static SampleFormat parse(string b);
+ }
+
+ [CCode (cname="pa_usec_t")]
+ public struct usec : uint64 {
+ }
+
+ [CCode (cname="pa_sample_spec")]
+ public struct SampleSpec {
+ public SampleFormat format;
+ public uint32 rate;
+ public uint8 channels;
+
+ [CCode (cname="PA_SAMPLE_SPEC_SNPRINT_MAX")]
+ public static const size_t SNPRINT_MAX;
+
+ [CCode (cname="pa_bytes_per_second")]
+ public size_t bytes_per_second();
+
+ [CCode (cname="pa_frame_size")]
+ public size_t frame_size();
+
+ [CCode (cname="pa_sample_size")]
+ public size_t sample_size();
+
+ [CCode (cname="pa_bytes_to_usec", instance_pos=1.1)]
+ public usec bytes_to_usec(size_t size);
+
+ [CCode (cname="pa_usec_to_bytes", instance_pos=1.1)]
+ public size_t usec_to_bytes(usec u);
+
+ [CCode (cname="pa_sample_spec_init")]
+ public unowned SampleSpec? init();
+
+ [CCode (cname="pa_sample_spec_valid")]
+ public bool valid();
+
+ [CCode (cname="pa_sample_spec_equal")]
+ public bool equal(SampleSpec other);
+
+ [CCode (cname="pa_sample_spec_snprint", instance_pos=3.1)]
+ public unowned string snprint(char[] buf);
+
+ public string sprint() {
+ var buffer = new char[SNPRINT_MAX];
+ this.snprint(buffer);
+ return (string) buffer;
+ }
+
+ public string to_string() {
+ return sprint();
+ }
+
+ [CCode (cname="pa_sample_spec_init")]
+ SampleSpec();
+ }
+
+ // [CCode (cname="PA_BYTES_SNPRINT_MAX")]
+ [CCode (cname="PA_SAMPLE_SPEC_SNPRINT_MAX")]
+ public const size_t BYTES_SNPRINT_MAX;
+
+ [CCode (cname="pa_bytes_snprint")]
+ public unowned string bytes_snprint(char[] buf, uint bytes);
+
+ public string bytes_sprint(uint bytes) {
+ var buffer = new char[BYTES_SNPRINT_MAX];
+ bytes_snprint(buffer, bytes);
+ return (string) buffer;
+ }
+
+ [CCode (cname="pa_volume_t")]
+ public struct Volume : uint32 {
+
+ [CCode (cname="PA_SW_VOLUME_SNPRINT_DB_MAX")]
+ public static const size_t SW_SNPRINT_DB_MAX;
+
+ [CCode (cname="PA_VOLUME_SNPRINT_MAX")]
+ public static const size_t SNPRINT_MAX;
+
+ [CCode (cname="PA_VOLUME_MAX")]
+ public static const Volume MAX;
+
+ [CCode (cname="PA_VOLUME_NORM")]
+ public static const Volume NORM;
+
+ [CCode (cname="PA_VOLUME_MUTED")]
+ public static const Volume MUTED;
+
+ // [CCode (cname="PA_VOLUME_INVALID")]
+ [CCode (cname="PA_VOLUME_MAX")]
+ public static const Volume INVALID;
+
+ [CCode (cname="pa_volume_snprint", instance_pos = 3.1)]
+ public unowned string snprint(char[] s);
+
+ public string sprint() {
+ var buffer = new char[SNPRINT_MAX];
+ this.snprint(buffer);
+ return (string) buffer;
+ }
+
+ public string to_string() {
+ return sprint();
+ }
+
+ [CCode (cname="pa_sw_volume_snprint_dB", instance_pos = 3.1)]
+ public unowned string sw_snprint_dB(char[] s);
+
+ public string sw_sprint_dB() {
+ var buffer = new char[SW_SNPRINT_DB_MAX];
+ this.sw_snprint_dB(buffer);
+ return (string) buffer;
+ }
+
+ [CCode (cname="pa_sw_volume_multiply")]
+ public Volume sw_multiply(Volume other);
+
+ [CCode (cname="pa_sw_volume_divide")]
+ public Volume sw_divide(Volume other);
+
+ [CCode (cname="pa_sw_volume_from_dB")]
+ public static Volume sw_from_dB(double f);
+
+ [CCode (cname="pa_sw_volume_to_dB")]
+ public double sw_to_dB();
+
+ [CCode (cname="pa_sw_volume_from_linear")]
+ public static Volume sw_from_linear(double f);
+
+ [CCode (cname="pa_sw_volume_to_linear")]
+ public double sw_to_linear();
+ }
+
+ [CCode (cname="PA_DECIBEL_MININFTY")]
+ public const double DECIBEL_MININFTY;
+
+ [CCode (cname="PA_CHANNELS_MAX")]
+ public const int CHANNELS_MAX;
+
+ [CCode (cname="PA_CHANNELS_MAX")]
+ public const int RATE_MAX;
+
+ [CCode (cname="pa_cvolume")]
+ public struct CVolume {
+ public uint8 channels;
+ public Volume values[];
+
+ [CCode (cname="PA_SW_CVOLUME_SNPRINT_DB_MAX")]
+ public static const size_t SW_SNPRINT_DB_MAX;
+
+ [CCode (cname="PA_CVOLUME_SNPRINT_MAX")]
+ public static const size_t SNPRINT_MAX;
+
+ [CCode (cname="pa_cvolume_equal")]
+ public bool equal(CVolume other);
+
+ [CCode (cname="pa_cvolume_init")]
+ public unowned CVolume? init();
+
+ [CCode (cname="pa_cvolume_reset")]
+ public unowned CVolume? reset(uint8 channels);
+
+ [CCode (cname="pa_cvolume_mute")]
+ public unowned CVolume? mute(uint8 channels);
+
+ [CCode (cname="pa_cvolume_snprint", instance_pos = 3.1)]
+ public unowned string snprint(char[] s);
+
+ public string sprint() {
+ var buffer = new char[SNPRINT_MAX];
+ this.snprint(buffer);
+ return (string) buffer;
+ }
+
+ public string to_string() {
+ return sprint();
+ }
+
+ [CCode (cname="pa_sw_cvolume_snprint_dB", instance_pos = 3.1)]
+ public unowned string sw_snprint_dB(char [] s);
+
+ public string sw_sprint_dB() {
+ var buffer = new char[SW_SNPRINT_DB_MAX];
+ this.sw_snprint_dB(buffer);
+ return (string) buffer;
+ }
+
+ [CCode (cname="pa_cvolume_init")]
+ public CVolume();
+
+ [CCode (cname="pa_cvolume_avg")]
+ public Volume avg();
+
+ [CCode (cname="pa_cvolume_max")]
+ public Volume max();
+
+ [CCode (cname="pa_cvolume_min")]
+ public Volume min();
+
+ [CCode (cname="pa_cvolume_avg_mask")]
+ public Volume avg_mask(ChannelMap map, ChannelPositionMask mask);
+
+ [CCode (cname="pa_cvolume_max_mask")]
+ public Volume max_mask(ChannelMap map, ChannelPositionMask mask);
+
+ [CCode (cname="pa_cvolume_min_mask")]
+ public Volume min_mask(ChannelMap map, ChannelPositionMask mask);
+
+ [CCode (cname="pa_cvolume_valid")]
+ public bool valid();
+
+ [CCode (cname="pa_cvolume_channels_equal_to")]
+ public bool channels_equal_to(Volume other);
+
+ [CCode (cname="pa_cvolume_is_muted")]
+ public bool is_muted();
+
+ [CCode (cname="pa_cvolume_is_norm")]
+ public bool is_norm();
+
+ [CCode (cname="pa_sw_cvolume_multiply")]
+ public unowned CVolume? multiply(CVolume other);
+
+ [CCode (cname="pa_sw_cvolume_divide")]
+ public unowned CVolume? divide(CVolume other);
+
+ [CCode (cname="pa_sw_cvolume_multiply_scalar")]
+ public unowned CVolume? multiply_scalar(Volume other);
+
+ [CCode (cname="pa_sw_cvolume_divide_scalar")]
+ public unowned CVolume? divide_scalar(Volume other);
+
+ [CCode (cname="pa_cvolume_remap")]
+ public unowned CVolume? remap(ChannelMap from, ChannelMap to);
+
+ [CCode (cname="pa_cvolume_compatible")]
+ public bool compatible(SampleSpec ss);
+
+ [CCode (cname="pa_cvolume_compatible_with_channel_map")]
+ public bool compatible_with_channel_map(ChannelMap cm);
+
+ [CCode (cname="pa_cvolume_get_balance")]
+ public float get_balance(ChannelMap map);
+
+ [CCode (cname="pa_cvolume_set_balance")]
+ public unowned CVolume? set_balance(ChannelMap map, float b);
+
+ [CCode (cname="pa_cvolume_get_fade")]
+ public float get_fade(ChannelMap map);
+
+ [CCode (cname="pa_cvolume_set_fade")]
+ public unowned CVolume? set_fade(ChannelMap map, float f);
+
+ [CCode (cname="pa_cvolume_scale")]
+ public unowned CVolume? scale(Volume max);
+
+ [CCode (cname="pa_cvolume_scale_mask")]
+ public unowned CVolume? scale_mask(Volume max, ChannelMap map, ChannelPositionMask mask);
+
+ [CCode (cname="pa_cvolume_set_position")]
+ public unowned CVolume? set_position(ChannelMap map, ChannelPosition p, Volume v);
+
+ [CCode (cname="pa_cvolume_get_position")]
+ public Volume get_position(ChannelMap map, ChannelPosition p);
+
+ [CCode (cname="pa_cvolume_merge")]
+ public unowned CVolume? merge(CVolume other);
+
+ [CCode (cname="pa_cvolume_inc")]
+ public unowned CVolume? inc(Volume plus = 1);
+
+ [CCode (cname="pa_cvolume_dec")]
+ public unowned CVolume? dec(Volume minus = 1);
+ }
+
+ [CCode (cname="pa_channel_map")]
+ public struct ChannelMap {
+ public uint8 channels;
+ public ChannelPosition map[];
+
+ [CCode (cname="PA_CHANNEL_MAP_SNPRINT_MAX")]
+ public static const size_t SNPRINT_MAX;
+
+ [CCode (cname="pa_channel_map_init")]
+ public ChannelMap();
+
+ [CCode (cname="pa_channel_map_init")]
+ public unowned ChannelMap? init();
+
+ [CCode (cname="pa_channel_map_init_mono")]
+ public unowned ChannelMap? init_mono();
+
+ [CCode (cname="pa_channel_map_init_stereo")]
+ public unowned ChannelMap? init_stereo();
+
+ [CCode (cname="pa_channel_map_init_auto")]
+ public unowned ChannelMap? init_auto(uint8 channels, ChannelMapDef def = ChannelMapDef.DEFAULT);
+
+ [CCode (cname="pa_channel_map_init_extend")]
+ public unowned ChannelMap? init_extend(uint8 channels, ChannelMapDef def = ChannelMapDef.DEFAULT);
+
+ [CCode (cname="pa_channel_map_snprint", instance_pos = 3.1)]
+ public unowned string snprint(char[] s);
+
+ public string sprint() {
+ var buffer = new char[SNPRINT_MAX];
+ this.snprint(buffer);
+ return (string) buffer;
+ }
+
+ public string to_string() {
+ return sprint();
+ }
+
+ [CCode (cname="pa_channel_map_parse")]
+ public unowned ChannelMap? parse(string s);
+
+ [CCode (cname="pa_channel_map_equal")]
+ public bool equal(ChannelMap other);
+
+ [CCode (cname="pa_channel_map_superset")]
+ public bool superset(ChannelMap other);
+
+ [CCode (cname="pa_channel_map_valid")]
+ public bool valid();
+
+ [CCode (cname="pa_channel_map_compatible")]
+ public bool compatible(SampleSpec ss);
+
+ [CCode (cname="pa_channel_map_can_balance")]
+ public bool can_balance();
+
+ [CCode (cname="pa_channel_map_can_fade")]
+ public bool can_fade();
+
+ [CCode (cname="pa_channel_map_to_name")]
+ public unowned string? to_name();
+
+ [CCode (cname="pa_channel_map_to_pretty_name")]
+ public unowned string? to_pretty_name();
+
+ [CCode (cname="pa_channel_map_has_position")]
+ public bool has_position(ChannelPosition p);
+
+ [CCode (cname="pa_channel_map_mask")]
+ public ChannelPositionMask mask();
+ }
+
+ [CCode (cname="pa_channel_position_mask_t")]
+ public struct ChannelPositionMask : uint64 {
+ }
+
+ [CCode (cname="pa_channel_position_t", cprefix="PA_CHANNEL_POSITION_")]
+ public enum ChannelPosition {
+ INVALID,
+ MONO,
+ FRONT_LEFT,
+ FRONT_RIGHT,
+ FRONT_CENTER,
+ REAR_CENTER,
+ REAR_LEFT,
+ REAR_RIGHT,
+ LFE,
+ FRONT_LEFT_OF_CENTER,
+ FRONT_RIGHT_OF_CENTER,
+ SIDE_LEFT,
+ SIDE_RIGHT,
+ TOP_CENTER,
+ AUX0,
+ AUX1,
+ AUX2,
+ AUX3,
+ AUX4,
+ AUX5,
+ AUX6,
+ AUX7,
+ AUX8,
+ AUX9,
+ AUX10,
+ AUX11,
+ AUX12,
+ AUX13,
+ AUX14,
+ AUX15,
+ AUX16,
+ AUX17,
+ AUX18,
+ AUX19,
+ AUX20,
+ AUX21,
+ AUX22,
+ AUX23,
+ AUX24,
+ AUX25,
+ AUX26,
+ AUX27,
+ AUX28,
+ AUX29,
+ AUX30,
+ AUX31,
+ MAX;
+
+ [CCode (cname="PA_CHANNEL_POSITION_MASK")]
+ public ChannelPositionMask mask();
+
+ [CCode (cname="pa_channel_position_to_string")]
+ public unowned string? to_string();
+
+ [CCode (cname="pa_channel_position_to_pretty_string")]
+ public unowned string? to_pretty_string();
+
+ [CCode (cname="pa_channel_position_from_string")]
+ public static ChannelPosition from_string(string s);
+ }
+
+ [CCode (cname="pa_channel_map_def_t", cprefix="PA_CHANNEL_MAP_")]
+ public enum ChannelMapDef {
+ AIFF,
+ WAVEEX,
+ AUX,
+ DEFAULT,
+
+ [CCode (cname="PA_CHANNEL_MAP_DEF_MAX")]
+ MAX
+ }
+
+ [Compact]
+ [CCode (cname="pa_proplist", cprefix="pa_proplist_", free_function="pa_proplist_free")]
+ public class Proplist {
+
+ [CCode (cname="PA_PROP_MEDIA_NAME")]
+ public static const string PROP_MEDIA_NAME;
+ [CCode (cname="PA_PROP_MEDIA_TITLE")]
+ public static const string PROP_MEDIA_TITLE;
+ [CCode (cname="PA_PROP_MEDIA_ARTIST")]
+ public static const string PROP_MEDIA_ARTIST;
+ [CCode (cname="PA_PROP_MEDIA_COPYRIGHT")]
+ public static const string PROP_MEDIA_COPYRIGHT;
+ [CCode (cname="PA_PROP_MEDIA_SOFTWARE")]
+ public static const string PROP_MEDIA_SOFTWARE;
+ [CCode (cname="PA_PROP_MEDIA_LANGUAGE")]
+ public static const string PROP_MEDIA_LANGUAGE;
+ [CCode (cname="PA_PROP_MEDIA_FILENAME")]
+ public static const string PROP_MEDIA_FILENAME;
+ [CCode (cname="PA_PROP_MEDIA_ICON_NAME")]
+ public static const string PROP_MEDIA_ICON_NAME;
+ [CCode (cname="PA_PROP_MEDIA_ROLE")]
+ public static const string PROP_MEDIA_ROLE;
+ [CCode (cname="PA_PROP_EVENT_ID")]
+ public static const string PROP_EVENT_ID;
+ [CCode (cname="PA_PROP_EVENT_DESCRIPTION")]
+ public static const string PROP_EVENT_DESCRIPTION;
+ [CCode (cname="PA_PROP_EVENT_MOUSE_X")]
+ public static const string PROP_EVENT_MOUSE_X;
+ [CCode (cname="PA_PROP_EVENT_MOUSE_Y")]
+ public static const string PROP_EVENT_MOUSE_Y;
+ [CCode (cname="PA_PROP_EVENT_MOUSE_HPOS")]
+ public static const string PROP_EVENT_MOUSE_HPOS;
+ [CCode (cname="PA_PROP_EVENT_MOUSE_VPOS")]
+ public static const string PROP_EVENT_MOUSE_VPOS;
+ [CCode (cname="PA_PROP_EVENT_MOUSE_BUTTON")]
+ public static const string PROP_EVENT_MOUSE_BUTTON;
+ [CCode (cname="PA_PROP_WINDOW_NAME")]
+ public static const string PROP_WINDOW_NAME;
+ [CCode (cname="PA_PROP_WINDOW_ID")]
+ public static const string PROP_WINDOW_ID;
+ [CCode (cname="PA_PROP_WINDOW_ICON_NAME")]
+ public static const string PROP_WINDOW_ICON_NAME;
+ [CCode (cname="PA_PROP_WINDOW_X11_DISPLAY")]
+ public static const string PROP_WINDOW_X11_DISPLAY;
+ [CCode (cname="PA_PROP_WINDOW_X11_SCREEN")]
+ public static const string PROP_WINDOW_X11_SCREEN;
+ [CCode (cname="PA_PROP_WINDOW_X11_MONITOR")]
+ public static const string PROP_WINDOW_X11_MONITOR;
+ [CCode (cname="PA_PROP_WINDOW_X11_XID")]
+ public static const string PROP_WINDOW_X11_XID;
+ [CCode (cname="PA_PROP_APPLICATION_NAME")]
+ public static const string PROP_APPLICATION_NAME;
+ [CCode (cname="PA_PROP_APPLICATION_ID")]
+ public static const string PROP_APPLICATION_ID;
+ [CCode (cname="PA_PROP_APPLICATION_VERSION")]
+ public static const string PROP_APPLICATION_VERSION;
+ [CCode (cname="PA_PROP_APPLICATION_ICON_NAME")]
+ public static const string PROP_APPLICATION_ICON_NAME;
+ [CCode (cname="PA_PROP_APPLICATION_LANGUAGE")]
+ public static const string PROP_APPLICATION_LANGUAGE;
+ [CCode (cname="PA_PROP_APPLICATION_PROCESS_ID")]
+ public static const string PROP_APPLICATION_PROCESS_ID;
+ [CCode (cname="PA_PROP_APPLICATION_PROCESS_BINARY")]
+ public static const string PROP_APPLICATION_PROCESS_BINARY;
+ [CCode (cname="PA_PROP_APPLICATION_PROCESS_USER")]
+ public static const string PROP_APPLICATION_PROCESS_USER;
+ [CCode (cname="PA_PROP_APPLICATION_PROCESS_HOST")]
+ public static const string PROP_APPLICATION_PROCESS_HOST;
+ [CCode (cname="PA_PROP_APPLICATION_PROCESS_MACHINE_ID")]
+ public static const string PROP_APPLICATION_PROCESS_MACHINE_ID;
+ [CCode (cname="PA_PROP_APPLICATION_PROCESS_SESSION_ID")]
+ public static const string PROP_APPLICATION_PROCESS_SESSION_ID;
+ [CCode (cname="PA_PROP_DEVICE_STRING")]
+ public static const string PROP_DEVICE_STRING;
+ [CCode (cname="PA_PROP_DEVICE_API")]
+ public static const string PROP_DEVICE_API;
+ [CCode (cname="PA_PROP_DEVICE_DESCRIPTION")]
+ public static const string PROP_DEVICE_DESCRIPTION;
+ [CCode (cname="PA_PROP_DEVICE_BUS_PATH")]
+ public static const string PROP_DEVICE_BUS_PATH;
+ [CCode (cname="PA_PROP_DEVICE_SERIAL")]
+ public static const string PROP_DEVICE_SERIAL;
+ [CCode (cname="PA_PROP_DEVICE_VENDOR_ID")]
+ public static const string PROP_DEVICE_VENDOR_ID;
+ [CCode (cname="PA_PROP_DEVICE_VENDOR_NAME")]
+ public static const string PROP_DEVICE_VENDOR_NAME;
+ [CCode (cname="PA_PROP_DEVICE_PRODUCT_ID")]
+ public static const string PROP_DEVICE_PRODUCT_ID;
+ [CCode (cname="PA_PROP_DEVICE_PRODUCT_NAME")]
+ public static const string PROP_DEVICE_PRODUCT_NAME;
+ [CCode (cname="PA_PROP_DEVICE_CLASS")]
+ public static const string PROP_DEVICE_CLASS;
+ [CCode (cname="PA_PROP_DEVICE_FORM_FACTOR")]
+ public static const string PROP_DEVICE_FORM_FACTOR;
+ [CCode (cname="PA_PROP_DEVICE_BUS")]
+ public static const string PROP_DEVICE_BUS;
+ [CCode (cname="PA_PROP_DEVICE_ICON_NAME")]
+ public static const string PROP_DEVICE_ICON_NAME;
+ [CCode (cname="PA_PROP_DEVICE_ACCESS_MODE")]
+ public static const string PROP_DEVICE_ACCESS_MODE;
+ [CCode (cname="PA_PROP_DEVICE_MASTER_DEVICE")]
+ public static const string PROP_DEVICE_MASTER_DEVICE;
+ [CCode (cname="PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE")]
+ public static const string PROP_DEVICE_BUFFERING_BUFFER_SIZE;
+ [CCode (cname="PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE")]
+ public static const string PROP_DEVICE_BUFFERING_FRAGMENT_SIZE;
+ [CCode (cname="PA_PROP_DEVICE_PROFILE_NAME")]
+ public static const string PROP_DEVICE_PROFILE_NAME;
+ [CCode (cname="PA_PROP_DEVICE_INTENDED_ROLES")]
+ public static const string PROP_DEVICE_INTENDED_ROLES;
+ [CCode (cname="PA_PROP_DEVICE_PROFILE_DESCRIPTION")]
+ public static const string PROP_DEVICE_PROFILE_DESCRIPTION;
+ [CCode (cname="PA_PROP_MODULE_AUTHOR")]
+ public static const string PROP_MODULE_AUTHOR;
+ [CCode (cname="PA_PROP_MODULE_DESCRIPTION")]
+ public static const string PROP_MODULE_DESCRIPTION;
+ [CCode (cname="PA_PROP_MODULE_USAGE")]
+ public static const string PROP_MODULE_USAGE;
+ [CCode (cname="PA_PROP_MODULE_VERSION")]
+ public static const string PROP_MODULE_VERSION;
+
+ [CCode (cname="pa_proplist_new")]
+ public Proplist();
+
+ public int sets(string key, string value);
+ public int setp(string pair);
+
+ [PrintfFormat]
+ public int setf(string key, string format, ...);
+
+ public int set(string key, void* data, size_t size);
+
+ public unowned string? gets(string key);
+
+ public int get(string key, out void* data, out size_t size);
+
+ public void update(UpdateMode mode, Proplist other);
+
+ public void unset(string key);
+
+ [CCode (array_length = false)]
+ public void unset_many(string[] key);
+
+ public unowned string? iterate(ref void* state);
+
+ public string to_string();
+
+ public string to_string_sep(string sep);
+
+ public static Proplist? from_string(string s);
+
+ public int contains(string key);
+
+ public void clear();
+
+ public Proplist copy();
+
+ public uint size();
+
+ public bool is_empty();
+ }
+
+ [CCode (cname="pa_update_mode_t", cprefix="PA_UPDATE_")]
+ public enum UpdateMode {
+ SET,
+ MERGE,
+ REPLACE
+ }
+
+ [CCode (cname="PA_OK")]
+ public const int OK;
+
+ [CCode (cname="int", cprefix="PA_ERR_")]
+ public enum Error {
+ ACCESS,
+ COMMAND,
+ INVALID,
+ EXIST,
+ NOENTITY,
+ CONNECTIONREFUSED,
+ PROTOCOL,
+ TIMEOUT,
+ AUTHKEY,
+ INTERNAL,
+ CONNECTIONTERMINATED,
+ KILLED,
+ INVALIDSERVER,
+ MODINITFAILED,
+ BADSTATE,
+ NODATA,
+ VERSION,
+ TOOLARGE,
+ NOTSUPPORTED,
+ UNKNOWN,
+ NOEXTENSION,
+ OBSOLETE,
+ NOTIMPLEMENTED,
+ FORKED,
+ IO,
+ MAX
+ }
+
+ [CCode (cname="pa_strerror")]
+ public unowned string? strerror(Error e);
+
+ public delegate void VoidFunc();
+
+ [CCode (cname="pa_spawn_api")]
+ public struct SpawnApi {
+ VoidFunc? prefork;
+ VoidFunc? postfork;
+ VoidFunc? atfork;
+ }
+
+ [CCode (cname="pa_io_event_flags_t", cprefix="PA_IO_EVENT_")]
+ public enum IoEventFlags {
+ NULL,
+ INPUT,
+ OUTPUT,
+ HANGUP,
+ ERROR
+ }
+
+ [CCode (cname="pa_io_event")]
+ public struct IoEvent {
+ }
+
+ [CCode (cname="pa_time_event")]
+ public struct TimeEvent {
+ }
+
+ [CCode (cname="pa_defer_event")]
+ public struct DeferEvent {
+ }
+
+ [CCode (cname="pa_signal_event", cprefix="pa_signal_", free_function="pa_signal_free")]
+ public struct SignalEvent {
+
+ [CCode (cname="pa_signal_new")]
+ public SignalEvent(int sig, MainLoopApi.SignalEventCb cb);
+
+ public void set_destroy(MainLoopApi.SignalEventDestroyCb cb);
+ }
+
+ [Compact]
+ [CCode (cname="pa_mainloop_api")]
+ public class MainLoopApi {
+ public void* userdata;
+
+ /* Callbacks for the consumer to implement*/
+ public delegate void IoEventCb(IoEvent e, int fd, IoEventFlags flags);
+ public delegate void IoEventDestroyCb(IoEvent e);
+
+ public delegate void TimeEventCb(TimeEvent e, ref timeval t);
+ public delegate void TimeEventDestroyCb(TimeEvent e);
+
+ public delegate void DeferEventCb(DeferEvent e);
+ public delegate void DeferEventDestroyCb(DeferEvent e);
+
+ public delegate void SignalEventCb(SignalEvent e);
+ public delegate void SignalEventDestroyCb(SignalEvent e);
+
+ /* Callbacks for the provider to implement */
+ public delegate IoEvent IoNewCb(int fd, IoEventFlags flags, IoEventCb cb);
+ public delegate void IoEnableCb(IoEvent e, IoEventFlags flags);
+ public delegate void IoFreeCb(IoEvent e);
+ public delegate void IoSetDestroyCb(IoEvent e, IoEventDestroyCb? cb);
+
+ public delegate TimeEvent TimeNewCb(ref timeval? t, TimeEventCb cb);
+ public delegate void TimeRestartCb(TimeEvent e, ref timeval? t);
+ public delegate void TimeFreeCb(TimeEvent e);
+ public delegate void TimeSetDestroyCb(TimeEvent e, TimeEventDestroyCb? cb);
+
+ public delegate DeferEvent DeferNewCb(DeferEventCb cb);
+ public delegate void DeferEnableCb(DeferEvent e, bool b);
+ public delegate void DeferFreeCb(DeferEvent e);
+ public delegate void DeferSetDestroyCb(DeferEvent e, DeferEventDestroyCb? cb);
+
+ public delegate void QuitCb(int retval);
+
+ public delegate void OnceCb();
+
+ public IoNewCb io_new;
+ public IoEnableCb io_enable;
+ public IoFreeCb io_free;
+ public IoSetDestroyCb io_set_destroy;
+
+ public TimeNewCb time_new;
+ public TimeRestartCb time_restart;
+ public TimeFreeCb time_free;
+ public TimeSetDestroyCb time_set_destroy;
+
+ public DeferNewCb defer_new;
+ public DeferEnableCb defer_enable;
+ public DeferFreeCb defer_free;
+ public DeferSetDestroyCb defer_set_destroy;
+
+ public QuitCb quit;
+
+ [CCode (cname="pa_mainloop_api_once")]
+ public void once(OnceCb cb);
+ }
+
+ [CCode (cname="pa_signal_init")]
+ public void signal_init(MainLoopApi api);
+
+ [CCode (cname="pa_signal_done")]
+ public void signal_done();
+
+ [CCode (cname="pa_poll_func")]
+ public delegate int PollFunc(pollfd[] ufds);
+
+ [Compact]
+ [CCode (cname="pa_mainloop", cprefix="pa_mainloop_", free_function="pa_mainloop_free")]
+ public class MainLoop {
+
+ [CCode (cname="pa_mainloop_new")]
+ public MainLoop();
+
+ public int prepare(int timeout = -1);
+ public int poll();
+ public int dispatch();
+ public int get_retval();
+ public int iterate(bool block = true, out int retval = null);
+ public int run(out int retval = null);
+ public unowned MainLoopApi get_api();
+ public void quit(int r);
+ public void wakeup();
+ public void set_poll_func(PollFunc poll_func);
+ }
+
+ [Compact]
+ [CCode (cname="pa_threaded_mainloop", cprefix="pa_threaded_mainloop_", free_function="pa_threaded_mainloop_free")]
+ public class ThreadedMainLoop {
+
+ [CCode (cname="pa_threaded_mainloop_new")]
+ public ThreadedMainLoop();
+
+ public int start();
+ public void stop();
+ public void lock();
+ public void unlock();
+ public void wait();
+ public void signal(bool WaitForAccept = false);
+ public void accept();
+ public int get_retval();
+ public unowned MainLoopApi get_api();
+ public bool in_thread();
+ }
+
+ [Compact]
+ [CCode (cname="pa_glib_mainloop", cprefix="pa_glib_mainloop_", free_function="pa_glib_mainloop_free")]
+ public class GLibMainLoop {
+
+ [CCode (cname="pa_glib_mainloop_new")]
+ public GLibMainLoop();
+
+ public unowned MainLoopApi get_api();
+ }
+
+ [Compact]
+ [CCode (cname="pa_operation", cprefix="pa_operation_", unref_function="pa_operation_unref", ref_function="pa_operation_ref")]
+ public class Operation {
+
+ [CCode (cname="pa_operation_state_t", cprefix="PA_OPERATION_")]
+ public enum State {
+ RUNNING,
+ DONE,
+ CANCELED
+ }
+
+ public void cancel();
+ public State get_state();
+ }
+
+ [Compact]
+ [CCode (cname="pa_context", cprefix="pa_context_", unref_function="pa_context_unref", ref_function="pa_context_ref")]
+ public class Context {
+
+ [CCode (cname="pa_context_flags_t", cprefix="PA_CONTEXT_")]
+ public enum Flags {
+ NOAUTOSPAWN,
+ NOFAIL
+ }
+
+ [CCode (cname="pa_context_state_t", cprefix="PA_CONTEXT_")]
+ public enum State {
+ UNCONNECTED,
+ CONNECTING,
+ AUTHORIZING,
+ SETTING_NAME,
+ READ,
+ FAILED,
+ TERMINATED;
+
+ bool IS_GOOD();
+ }
+
+ [CCode (cname="pa_subscription_mask_t", cprefix="PA_SUBSCRIPTION_MASK_")]
+ public enum SubscriptionMask {
+ NULL,
+ SINK,
+ SOURCE,
+ SINK_INPUT,
+ SOURCE_OUTPUT,
+ MODULE,
+ CLIENT,
+ SAMPLE_CACHE,
+ SERVER,
+ CARD,
+ ALL;
+
+ [CCode (cname="pa_subscription_match_flags")]
+ bool match_flags(SubscriptionEventType t);
+ }
+
+ [CCode (cname="pa_subscription_event_type_t", cprefix="PA_SUBSCRIPTION_EVENT_")]
+ public enum SubscriptionEventType {
+ SINK,
+ SOURCE,
+ SINK_INPUT,
+ SOURCE_OUTPUT,
+ MODULE,
+ CLIENT,
+ SAMPLE_CACHE,
+ SERVER,
+ CARD,
+ FACILITY_MASK,
+ NEW,
+ CHANGE,
+ REMOVE,
+ TYPE_MASK
+ }
+
+ public delegate void NotifyCb();
+ public delegate void SuccessCb(int success);
+ public delegate void EventCb(string name, Proplist? proplist);
+ public delegate void SubscribeCb(SubscriptionEventType t, uint32 idx);
+ public delegate void SinkInfoCb(SinkInfo? i, int eol);
+ public delegate void SourceInfoCb(SourceInfo? i, int eol);
+ public delegate void CardInfoCb(CardInfo? i, int eol);
+ public delegate void SinkInputInfoCb(SinkInputInfo? i, int eol);
+ public delegate void SourceOutputInfoCb(SourceOutputInfo? i, int eol);
+ public delegate void ServerInfoCb(ServerInfo? i);
+ public delegate void StatInfoCb(ServerInfo? i);
+ public delegate void ModuleInfoCb(ModuleInfo? i, int eol);
+ public delegate void ClientInfoCb(ClientInfo? i, int eol);
+ public delegate void SampleInfoCb(SampleInfo? i, int eol);
+ public delegate void IndexCb(uint32 idx);
+
+ [CCode (cname="pa_context_new_with_proplist")]
+ public Context(MainLoopApi api, string? name, Proplist? proplist = null);
+
+ public void set_state_callback(NotifyCb? cb = null);
+ public void set_event_callback(EventCb? cb = null);
+ public void set_subscribe_callback(SubscribeCb? cb = null);
+
+ public Error errno();
+
+ public int is_pending();
+ public State get_state();
+ public int is_local();
+ public unowned string? get_server();
+ public uint32 get_protocol_version();
+ public uint32 get_server_protocol_version();
+ public uint32 get_index();
+
+ public int connect(string? server = null, Flags flags = 0, SpawnApi? api = null);
+ public void disconnect();
+
+ public Operation? drain(NotifyCb? cb = null);
+ public Operation? exit_daemon(SuccessCb? cb = null);
+ public Operation? set_default_sink(string name, SuccessCb? cb = null);
+ public Operation? set_default_source(string name, SuccessCb? cb = null);
+ public Operation? set_name(string name, SuccessCb? cb = null);
+
+ [CCode (array_length = false)]
+ public Operation? proplist_remove(string[] keys, SuccessCb? cb = null);
+ public Operation? proplist_update(UpdateMode mode, Proplist pl, SuccessCb? cb = null);
+
+ public Operation? subscribe(SubscriptionMask mask, SuccessCb? cb = null);
+
+ public Operation? get_sink_info_by_name(string name, SinkInfoCb cb);
+ public Operation? get_sink_info_by_index(uint32 idx, SinkInfoCb cb);
+ public Operation? get_sink_info_list(SinkInfoCb cb);
+
+ public Operation? set_sink_volume_by_name(string name, CVolume volume, SuccessCb? cb = null);
+ public Operation? set_sink_volume_by_index(uint32 idx, CVolume volume, SuccessCb? cb = null);
+ public Operation? set_sink_mute_by_name(string name, bool mute, SuccessCb? cb = null);
+ public Operation? set_sink_mute_by_index(uint32 idx, bool mute, SuccessCb? cb = null);
+
+ public Operation? suspend_sink_by_name(string name, bool suspend, SuccessCb? cb = null);
+ public Operation? suspend_sink_by_index(uint32 idx, bool suspend, SuccessCb? cb = null);
+
+ public Operation? set_sink_port_by_name(string name, string port, SuccessCb? cb = null);
+ public Operation? set_sink_port_by_index(string idx, string port, SuccessCb? cb = null);
+
+ public Operation? get_source_info_by_name(string name, SourceInfoCb cb);
+ public Operation? get_source_info_by_index(uint32 idx, SourceInfoCb cb);
+ public Operation? get_source_info_list(SourceInfoCb cb);
+
+ public Operation? set_source_volume_by_name(string name, CVolume volume, SuccessCb? cb = null);
+ public Operation? set_source_volume_by_index(uint32 idx, CVolume volume, SuccessCb? cb = null);
+ public Operation? set_source_mute_by_name(string name, bool mute, SuccessCb? cb = null);
+ public Operation? set_source_mute_by_index(uint32 idx, bool mute, SuccessCb? cb = null);
+
+ public Operation? suspend_source_by_name(string name, bool suspend, SuccessCb? cb = null);
+ public Operation? suspend_source_by_index(uint32 idx, bool suspend, SuccessCb? cb = null);
+
+ public Operation? set_source_port_by_name(string name, string port, SuccessCb? cb = null);
+ public Operation? set_source_port_by_index(string idx, string port, SuccessCb? cb = null);
+
+ public Operation? get_server_info(ServerInfoCb cb);
+
+ public Operation? get_module_info(uint32 idx, ModuleInfoCb cb);
+ public Operation? get_module_info_list(ModuleInfoCb cb);
+
+ public Operation? load_module(string name, string? argument, IndexCb? cb = null);
+ public Operation? unload_module(uint32 idx, SuccessCb? cb = null);
+
+ public Operation? get_client_info(uint32 idx, ClientInfoCb cb);
+ public Operation? get_client_info_list(ClientInfoCb cb);
+
+ public Operation? kill_client(uint32 idx, SuccessCb? cb = null);
+
+ public Operation? get_card_info_by_name(string name, CardInfoCb cb);
+ public Operation? get_card_info_by_index(uint32 idx, CardInfoCb cb);
+ public Operation? get_card_info_list(CardInfoCb cb);
+
+ public Operation? set_card_profile_by_index(uint32 idx, string profile, SuccessCb? cb = null);
+ public Operation? set_card_profile_by_name(string name, string profile, SuccessCb? cb = null);
+
+ public Operation? get_sink_input_info(uint32 idx, SinkInputInfoCb cb);
+ public Operation? get_sink_input_info_list(SinkInputInfoCb cb);
+
+ public Operation? move_sink_input_by_index(uint32 idx, uint32 sink_idx, SuccessCb? cb = null);
+ public Operation? move_sink_input_by_name(uint32 idx, string sink_name, SuccessCb? cb = null);
+
+ public Operation? set_sink_input_volume(uint32 idx, CVolume volume, SuccessCb? cb = null);
+ public Operation? set_sink_input_mute(uint32 idx, bool mute, SuccessCb? cb = null);
+
+ public Operation? kill_sink_input(uint32 idx, SuccessCb? cb = null);
+
+ public Operation? get_source_output_info(uint32 idx, SourceOutputInfoCb cb);
+ public Operation? get_source_output_info_list(SourceOutputInfoCb cb);
+
+ public Operation? move_source_output_by_index(uint32 idx, uint32 source_idx, SuccessCb? cb = null);
+ public Operation? move_source_output_by_name(uint32 idx, string source_name, SuccessCb? cb = null);
+
+ public Operation? kill_source_output(uint32 idx, SuccessCb? cb = null);
+
+ public Operation? stat(StatInfoCb cb);
+
+ public Operation? get_sample_info_by_name(string name, SampleInfoCb cb);
+ public Operation? get_sample_info_by_index(uint32 idx, SampleInfoCb cb);
+ public Operation? get_sample_info_list(SampleInfoCb cb);
+
+ public Operation? remove_sample(string name, SuccessCb? cb = null);
+
+ public Operation? play_sample(string name, string? device = null, Volume volume = Volume.INVALID, SuccessCb? cb = null);
+ public Operation? play_sample_with_proplist(string name, string? device = null, Volume volume = Volume.INVALID, Proplist? p = null, IndexCb? cb = null);
+ }
+
+ [Compact]
+ [CCode (cname="pa_stream", cprefix="pa_stream_", unref_function="pa_stream_unref", ref_function="pa_stream_ref")]
+ public class Stream {
+
+ [CCode (cname="pa_stream_flags_t", cprefix="PA_STREAM_")]
+ public enum Flags {
+ START_CORKED,
+ INTERPOLATE_TIMING,
+ NOT_MONOTONIC,
+ AUTO_TIMING_UPDATE,
+ NO_REMAP_CHANNELS,
+ NO_REMIX_CHANNELS,
+ FIX_FORMAT,
+ FIX_RATE,
+ FIX_CHANNELS,
+ DONT_MOVE,
+ VARIABLE_RATE,
+ PEAK_DETECT,
+ START_MUTED,
+ ADJUST_LATENCY,
+ EARLY_REQUESTS,
+ DONT_INHIBIT_AUTO_SUSPEND,
+ START_UNMUTED,
+ FAIL_ON_SUSPEND
+ }
+
+ [CCode (cname="pa_stream_state_t", cprefix="PA_STREAM_")]
+ public enum State {
+ UNCONNECTED,
+ CREATING,
+ READY,
+ FAILED,
+ TERMINATED;
+
+ bool IS_GOOD();
+ }
+
+ [CCode (cname="pa_stream_direction_t", cprefix="PA_STREAM_")]
+ public enum Direction {
+ NODIRECTION,
+ PLAYBACK,
+ RECORD,
+ UPLOAD
+ }
+
+ [CCode (cname="pa_seek_mode_t", cprefix="PA_SEEK_")]
+ public enum SeekMode {
+ RELATIVE,
+ ABSOLUTE,
+ RELATIVE_ON_READ,
+ RELATIVE_END
+ }
+
+ [CCode (cname="pa_buffer_attr")]
+ public struct BufferAttr {
+ uint32 maxlength;
+ uint32 tlength;
+ uint32 prebuf;
+ uint32 minreq;
+ uint32 fragsize;
+ }
+
+ [CCode (cname="pa_timing_info")]
+ public struct TimingInfo {
+ timeval timestamp;
+ int synchronized_clocks;
+ usec sink_usec;
+ usec source_usec;
+ usec transport_usec;
+ int playing;
+ int write_index_corrupt;
+ int64 write_index;
+ int read_index_corrupt;
+ int64 read_index;
+ usec configured_sink_usec;
+ usec configured_source_usec;
+ int64 since_underrun;
+ }
+
+ [CCode (cname="PA_STREAM_EVENT_REQUEST_CORK")]
+ public const string EVENT_REQUEST_CORK;
+
+ [CCode (cname="PA_STREAM_EVENT_REQUEST_UNCORK")]
+ public const string EVENT_REQUEST_UNCORK;
+
+ public delegate void SuccessCb(int success);
+ public delegate void RequestCb(size_t nbytes);
+ public delegate void NotifyCb();
+ public delegate void EventCb(string name, Proplist proplist);
+
+ [CCode (cname="pa_stream_new_with_proplist")]
+ public Stream(Context c, string name, SampleSpec ss, ChannelMap map = null, Proplist proplist = null);
+
+ public State get_state();
+ public Context get_context();
+ public uint32 get_index();
+ public uint32 get_device_index();
+ public unowned string? get_device_name();
+ public int is_suspended();
+ public int is_corked();
+
+ public int connect_playback(string dev, BufferAttr a = null, Flags flags = 0, Volume volume = null, Stream sync_stream = null);
+ public int connect_record(string dev, BufferAttr a = null, Flags flags = 0);
+ public int connect_upload(size_t length);
+ public int disconnect();
+ public int finish_upload();
+
+ public int begin_write(out void* data, out size_t nbytes);
+ public int cancel_write();
+ public int write(void *data, size_t bytes, FreeCb free_cb = null, int64 offset = 0, SeekMode mode = SeekMode.RELATIVE);
+ public int peek(out void *data, out size_t nbytes);
+ public int drop();
+ public size_t writable_size();
+ public size_t readable_size();
+
+ public void set_state_callback(NotifyCb cb = null);
+ public void set_write_callback(RequestCb cb = null);
+ public void set_read_callback(RequestCb cb = null);
+ public void set_overflow_callback(NotifyCb cb = null);
+ public void set_underflow_callback(NotifyCb cb = null);
+ public void set_started_callback(NotifyCb cb = null);
+ public void set_latency_update_callback(NotifyCb cb = null);
+ public void set_moved_callback(NotifyCb cb = null);
+ public void set_suspended_callback(NotifyCb cb = null);
+ public void set_event_callback(EventCb cb = null);
+ public void set_buffer_attr_callback(NotifyCb cb = null);
+
+ public Operation? drain(SuccessCb cb = null);
+ public Operation? update_timing_info(SuccessCb cb = null);
+
+ public Operation? cork(bool b, SuccessCb cb = null);
+ public Operation? flush(SuccessCb cb = null);
+ public Operation? prebuf(SuccessCb cb = null);
+ public Operation? trigger(SuccessCb cb = null);
+
+ public Operation? set_name(string name, SuccessCb cb = null);
+ public Operation? set_buffer_attr(BufferAttr attr, SuccessCb cb = null);
+ public Operation? update_sample_rate(uint32 rate, SuccessCb cb = null);
+
+ [CCode (array_length = false)]
+ public Operation? proplist_remove(string[] keys, SuccessCb cb = null);
+ public Operation? proplist_update(UpdateMode mode, Proplist pl, SuccessCb cb = null);
+
+ public unowned TimingInfo? get_timing_info();
+ public int get_time(out usec u);
+ public int get_latency(out usec u, out bool negative = null);
+
+ public unowned SampleSpec? get_sample_spec();
+ public unowned ChannelMap? get_channel_map();
+ public unowned BufferAttr? get_buffer_attr();
+
+ public int set_monitor_stream(uint32 sink_input);
+ public uint32 get_monitor_stream();
+ }
+
+ [CCode (cname="pa_sink_port_info")]
+ public struct SinkPortInfo {
+ string name;
+ string description;
+ uint32 priority;
+ }
+
+ [CCode (cname="pa_sink_info")]
+ public struct SinkInfo {
+ string name;
+ uint32 index;
+ string description;
+ SampleSpec sample_spec;
+ ChannelMap channel_map;
+ uint32 owner_module;
+ CVolume volume;
+ int mute;
+ uint32 monitor_source;
+ string monitor_source_name;
+ usec latency;
+ string driver;
+ SinkFlags flags;
+ Proplist proplist;
+ usec configured_latency;
+ Volume base_volume;
+ SinkState state;
+ uint32 n_volume_steps;
+ uint32 card;
+ uint32 n_ports;
+ SinkPortInfo*[] ports;
+ SinkPortInfo* active_port;
+ }
+
+ [CCode (cname="pa_source_port_info")]
+ public struct SourcePortInfo {
+ string name;
+ string description;
+ uint32 priority;
+ }
+
+ [CCode (cname="pa_source_info")]
+ public struct SourceInfo {
+ string name;
+ uint32 index;
+ string description;
+ SampleSpec sample_spec;
+ ChannelMap channel_map;
+ uint32 owner_module;
+ CVolume volume;
+ int mute;
+ uint32 monitor_of_sink;
+ string monitor_of_sink_name;
+ usec latency;
+ string driver;
+ SourceFlags flags;
+ Proplist proplist;
+ usec configured_latency;
+ Volume base_volume;
+ SourceState state;
+ uint32 n_volume_steps;
+ uint32 card;
+ uint32 n_ports;
+ SourcePortInfo*[] ports;
+ SourcePortInfo* active_port;
+ }
+
+ [CCode (cname="pa_server_info")]
+ public struct ServerInfo {
+ string user_name;
+ string host_name;
+ string server_version;
+ string server_name;
+ SampleSpec sample_spec;
+ string default_sink_name;
+ string default_source_name;
+ ChannelMap channel_map;
+ }
+
+ [CCode (cname="pa_module_info")]
+ public struct ModuleInfo {
+ uint32 index;
+ string name;
+ string argument;
+ uint32 n_used;
+ Proplist proplist;
+ }
+
+ [CCode (cname="pa_client_info")]
+ public struct ClientInfo {
+ uint32 index;
+ string name;
+ uint32 owner_module;
+ string driver;
+ Proplist proplist;
+ }
+
+ [CCode (cname="pa_card_profile_info")]
+ public struct CardProfileInfo {
+ string name;
+ string description;
+ uint32 n_sinks;
+ uint32 n_sources;
+ uint32 priority;
+ }
+
+ [CCode (cname="pa_card_info")]
+ public struct CardInfo {
+ uint32 index;
+ string name;
+ uint32 owner_module;
+ string driver;
+ uint32 n_profiles;
+ CardProfileInfo profiles[];
+ CardProfileInfo *active_profile;
+ Proplist proplist;
+ }
+
+ [CCode (cname="pa_sink_input_info")]
+ public struct SinkInputInfo {
+ uint32 index;
+ string name;
+ uint32 owner_module;
+ uint32 client;
+ uint32 sink;
+ SampleSpec sample_spec;
+ ChannelMap channel_map;
+ CVolume volume;
+ uint32 buffer_usec;
+ uint32 sink_usec;
+ string resample_method;
+ string driver;
+ int mute;
+ Proplist proplist;
+ }
+
+ [CCode (cname="pa_source_output_info")]
+ public struct SourceOutputInfo {
+ uint32 index;
+ string name;
+ uint32 owner_module;
+ uint32 client;
+ uint32 source;
+ SampleSpec sample_spec;
+ ChannelMap channel_map;
+ uint32 buffer_usec;
+ uint32 sink_usec;
+ string resample_method;
+ string driver;
+ Proplist proplist;
+ }
+
+ [CCode (cname="pa_stat_info")]
+ public struct StatInfo {
+ uint32 memblock_total;
+ uint32 memblock_total_size;
+ uint32 memblock_allocated;
+ uint32 memblock_allocated_size;
+ uint32 scache_size;
+ }
+
+ [CCode (cname="pa_sample_info")]
+ public struct SampleInfo {
+ uint32 index;
+ string name;
+ CVolume volume;
+ SampleSpec sample_spec;
+ ChannelMap channel_map;
+ usec duration;
+ uint32 bytes;
+ bool lazy;
+ string filename;
+ Proplist proplist;
+ }
+
+ [CCode (cname="pa_sink_flags_t", cprefix="PA_SINK_")]
+ public enum SinkFlags {
+ HW_VOLUME_CTRL,
+ LATENCY,
+ HARDWARE,
+ NETWORK,
+ HW_MUTE_CTRL,
+ DECIBEL_VOLUME,
+ FLAT_VOLUME,
+ DYNAMIC_LATENCY
+ }
+
+ [CCode (cname="pa_source_flags_t", cprefix="PA_SOURCE_")]
+ public enum SourceFlags {
+ HW_VOLUME_CTRL,
+ LATENCY,
+ HARDWARE,
+ NETWORK,
+ HW_MUTE_CTRL,
+ DECIBEL_VOLUME,
+ DYNAMIC_LATENCY
+ }
+
+ [CCode (cname="pa_sink_state_t", cprefix="PA_SINK_")]
+ public enum SinkState {
+ INVALID_STATE,
+ RUNNING,
+ IDLE,
+ SUSPENDED;
+
+ [CCode (cname="PA_SINK_IS_OPENED")]
+ public bool IS_OPENED();
+ }
+
+ [CCode (cname="pa_source_state_t", cprefix="PA_SOURCE_")]
+ public enum SourceState {
+ INVALID_STATE,
+ RUNNING,
+ IDLE,
+ SUSPENDED;
+
+ [CCode (cname="PA_SOURCE_IS_OPENED")]
+ public bool IS_OPENED();
+ }
+}
diff --git a/src/pulse/context.h b/src/pulse/context.h
index cd129313..670b23e8 100644
--- a/src/pulse/context.h
+++ b/src/pulse/context.h
@@ -267,7 +267,6 @@ pa_time_event* pa_context_rttime_new(pa_context *c, pa_usec_t usec, pa_time_even
for mainloop->time_restart). \since 0.9.16 */
void pa_context_rttime_restart(pa_context *c, pa_time_event *e, pa_usec_t usec);
-
PA_C_DECL_END
#endif
diff --git a/src/pulse/introspect.h b/src/pulse/introspect.h
index ee982100..68cfc874 100644
--- a/src/pulse/introspect.h
+++ b/src/pulse/introspect.h
@@ -331,6 +331,12 @@ pa_operation* pa_context_set_source_mute_by_index(pa_context *c, uint32_t idx, i
/** Set the mute switch of a source device specified by its name */
pa_operation* pa_context_set_source_mute_by_name(pa_context *c, const char *name, int mute, pa_context_success_cb_t cb, void *userdata);
+/** Suspend/Resume a source. \since 0.9.7 */
+pa_operation* pa_context_suspend_source_by_name(pa_context *c, const char *source_name, int suspend, pa_context_success_cb_t cb, void* userdata);
+
+/** Suspend/Resume a source. If idx is PA_INVALID_INDEX all sources will be suspended. \since 0.9.7 */
+pa_operation* pa_context_suspend_source_by_index(pa_context *c, uint32_t idx, int suspend, pa_context_success_cb_t cb, void* userdata);
+
/** Change the profile of a source. \since 0.9.16 */
pa_operation* pa_context_set_source_port_by_index(pa_context *c, uint32_t idx, const char*port, pa_context_success_cb_t cb, void *userdata);
@@ -557,12 +563,6 @@ pa_operation* pa_context_move_source_output_by_name(pa_context *c, uint32_t idx,
/** Move the specified source output to a different source. \since 0.9.5 */
pa_operation* pa_context_move_source_output_by_index(pa_context *c, uint32_t idx, uint32_t source_idx, pa_context_success_cb_t cb, void* userdata);
-/** Suspend/Resume a source. \since 0.9.7 */
-pa_operation* pa_context_suspend_source_by_name(pa_context *c, const char *source_name, int suspend, pa_context_success_cb_t cb, void* userdata);
-
-/** Suspend/Resume a source. If idx is PA_INVALID_INDEX all sources will be suspended. \since 0.9.7 */
-pa_operation* pa_context_suspend_source_by_index(pa_context *c, uint32_t idx, int suspend, pa_context_success_cb_t cb, void* userdata);
-
/** Kill a source output. */
pa_operation* pa_context_kill_source_output(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata);
diff --git a/src/pulse/sample.h b/src/pulse/sample.h
index 53d7dea3..7a4a55a0 100644
--- a/src/pulse/sample.h
+++ b/src/pulse/sample.h
@@ -302,6 +302,13 @@ pa_sample_format_t pa_parse_sample_format(const char *format) PA_GCC_PURE;
/** Pretty print a sample type specification to a string */
char* pa_sample_spec_snprint(char *s, size_t l, const pa_sample_spec *spec);
+/** Maximum required string length for pa_bytes_snprint(). Please note
+ * that this value can change with any release without warning and
+ * without being considered API or ABI breakage. You should not use
+ * this definition anywhere where it might become part of an
+ * ABI. \since 0.9.16 */
+#define PA_BYTES_SNPRINT_MAX 11
+
/** Pretty print a byte size value. (i.e. "2.5 MiB") */
char* pa_bytes_snprint(char *s, size_t l, unsigned v);
diff --git a/src/pulse/scache.c b/src/pulse/scache.c
index 77f60d72..27da6887 100644
--- a/src/pulse/scache.c
+++ b/src/pulse/scache.c
@@ -187,7 +187,7 @@ pa_operation *pa_context_play_sample(pa_context *c, const char *name, const char
pa_tagstruct_putu32(t, PA_INVALID_INDEX);
pa_tagstruct_puts(t, dev);
- if (volume == (pa_volume_t) -1 && c->version < 15)
+ if (volume == PA_VOLUME_INVALID && c->version < 15)
volume = PA_VOLUME_NORM;
pa_tagstruct_putu32(t, volume);
@@ -216,7 +216,6 @@ pa_operation *pa_context_play_sample_with_proplist(pa_context *c, const char *na
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, name && *name, PA_ERR_INVALID);
PA_CHECK_VALIDITY_RETURN_NULL(c, !dev || *dev, PA_ERR_INVALID);
- PA_CHECK_VALIDITY_RETURN_NULL(c, p, PA_ERR_INVALID);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 13, PA_ERR_NOTSUPPORTED);
o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
@@ -228,12 +227,19 @@ pa_operation *pa_context_play_sample_with_proplist(pa_context *c, const char *na
pa_tagstruct_putu32(t, PA_INVALID_INDEX);
pa_tagstruct_puts(t, dev);
- if (volume == (pa_volume_t) -1 && c->version < 15)
+ if (volume == PA_VOLUME_INVALID && c->version < 15)
volume = PA_VOLUME_NORM;
pa_tagstruct_putu32(t, volume);
pa_tagstruct_puts(t, name);
- pa_tagstruct_put_proplist(t, p);
+
+ if (p)
+ pa_tagstruct_put_proplist(t, p);
+ else {
+ p = pa_proplist_new();
+ pa_tagstruct_put_proplist(t, p);
+ pa_proplist_free(p);
+ }
pa_pstream_send_tagstruct(c->pstream, t);
pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, play_sample_with_proplist_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
diff --git a/src/pulse/scache.h b/src/pulse/scache.h
index cd579d2e..31cf7b01 100644
--- a/src/pulse/scache.h
+++ b/src/pulse/scache.h
@@ -101,7 +101,7 @@ pa_operation* pa_context_play_sample(
pa_context *c /**< Context */,
const char *name /**< Name of the sample to play */,
const char *dev /**< Sink to play this sample on */,
- pa_volume_t volume /**< Volume to play this sample with. Starting with 0.9.15 you may pass here (pa_volume_t) -1 which will leave the decision about the volume to the server side which is a good idea. */ ,
+ pa_volume_t volume /**< Volume to play this sample with. Starting with 0.9.15 you may pass here PA_VOLUME_INVALID which will leave the decision about the volume to the server side which is a good idea. */ ,
pa_context_success_cb_t cb /**< Call this function after successfully starting playback, or NULL */,
void *userdata /**< Userdata to pass to the callback */);
@@ -113,7 +113,7 @@ pa_operation* pa_context_play_sample_with_proplist(
pa_context *c /**< Context */,
const char *name /**< Name of the sample to play */,
const char *dev /**< Sink to play this sample on */,
- pa_volume_t volume /**< Volume to play this sample with. Starting with 0.9.15 you may pass here (pa_volume_t) -1 which will leave the decision about the volume to the server side which is a good idea. */ ,
+ pa_volume_t volume /**< Volume to play this sample with. Starting with 0.9.15 you may pass here PA_VOLUME_INVALID which will leave the decision about the volume to the server side which is a good idea. */ ,
pa_proplist *proplist /**< Property list for this sound. The property list of the cached entry will be merged into this property list */,
pa_context_play_sample_cb_t cb /**< Call this function after successfully starting playback, or NULL */,
void *userdata /**< Userdata to pass to the callback */);
diff --git a/src/pulse/stream.h b/src/pulse/stream.h
index 8a08421f..21dd0a85 100644
--- a/src/pulse/stream.h
+++ b/src/pulse/stream.h
@@ -319,7 +319,7 @@ typedef struct pa_stream pa_stream;
typedef void (*pa_stream_success_cb_t) (pa_stream*s, int success, void *userdata);
/** A generic request callback */
-typedef void (*pa_stream_request_cb_t)(pa_stream *p, size_t bytes, void *userdata);
+typedef void (*pa_stream_request_cb_t)(pa_stream *p, size_t nbytes, void *userdata);
/** A generic notification callback */
typedef void (*pa_stream_notify_cb_t)(pa_stream *p, void *userdata);
diff --git a/src/pulse/volume.c b/src/pulse/volume.c
index 234c3f72..47bccad2 100644
--- a/src/pulse/volume.c
+++ b/src/pulse/volume.c
@@ -64,7 +64,7 @@ pa_cvolume* pa_cvolume_init(pa_cvolume *a) {
a->channels = 0;
for (c = 0; c < PA_CHANNELS_MAX; c++)
- a->values[c] = (pa_volume_t) -1;
+ a->values[c] = PA_VOLUME_INVALID;
return a;
}
@@ -201,6 +201,9 @@ pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, p
pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {
+ pa_return_val_if_fail(a != PA_VOLUME_INVALID, PA_VOLUME_INVALID);
+ pa_return_val_if_fail(b != PA_VOLUME_INVALID, PA_VOLUME_INVALID);
+
/* cbrt((a/PA_VOLUME_NORM)^3*(b/PA_VOLUME_NORM)^3)*PA_VOLUME_NORM = a*b/PA_VOLUME_NORM */
return (pa_volume_t) (((uint64_t) a * (uint64_t) b + (uint64_t) PA_VOLUME_NORM / 2ULL) / (uint64_t) PA_VOLUME_NORM);
@@ -208,6 +211,9 @@ pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {
pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) {
+ pa_return_val_if_fail(a != PA_VOLUME_INVALID, PA_VOLUME_INVALID);
+ pa_return_val_if_fail(b != PA_VOLUME_INVALID, PA_VOLUME_INVALID);
+
if (b <= PA_VOLUME_MUTED)
return 0;
@@ -232,6 +238,8 @@ pa_volume_t pa_sw_volume_from_dB(double dB) {
double pa_sw_volume_to_dB(pa_volume_t v) {
+ pa_return_val_if_fail(v != PA_VOLUME_INVALID, PA_DECIBEL_MININFTY);
+
if (v <= PA_VOLUME_MUTED)
return PA_DECIBEL_MININFTY;
@@ -259,6 +267,8 @@ pa_volume_t pa_sw_volume_from_linear(double v) {
double pa_sw_volume_to_linear(pa_volume_t v) {
double f;
+ pa_return_val_if_fail(v != PA_VOLUME_INVALID, 0.0);
+
if (v <= PA_VOLUME_MUTED)
return 0.0;
@@ -307,7 +317,7 @@ char *pa_volume_snprint(char *s, size_t l, pa_volume_t v) {
pa_init_i18n();
- if (v == (pa_volume_t) -1) {
+ if (v == PA_VOLUME_INVALID) {
pa_snprintf(s, l, _("(invalid)"));
return s;
}
@@ -357,7 +367,7 @@ char *pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v) {
pa_init_i18n();
- if (v == (pa_volume_t) -1) {
+ if (v == PA_VOLUME_INVALID) {
pa_snprintf(s, l, _("(invalid)"));
return s;
}
@@ -374,6 +384,7 @@ int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) {
pa_assert(a);
pa_return_val_if_fail(pa_cvolume_valid(a), 0);
+ pa_return_val_if_fail(v != PA_VOLUME_INVALID, 0);
for (c = 0; c < a->channels; c++)
if (a->values[c] != v)
@@ -407,6 +418,7 @@ pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a,
pa_assert(a);
pa_return_val_if_fail(pa_cvolume_valid(a), NULL);
+ pa_return_val_if_fail(b != PA_VOLUME_INVALID, NULL);
for (i = 0; i < a->channels; i++)
dest->values[i] = pa_sw_volume_multiply(a->values[i], b);
@@ -441,6 +453,7 @@ pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, p
pa_assert(a);
pa_return_val_if_fail(pa_cvolume_valid(a), NULL);
+ pa_return_val_if_fail(b != PA_VOLUME_INVALID, NULL);
for (i = 0; i < a->channels; i++)
dest->values[i] = pa_sw_volume_divide(a->values[i], b);
@@ -459,7 +472,7 @@ int pa_cvolume_valid(const pa_cvolume *v) {
return 0;
for (c = 0; c < v->channels; c++)
- if (v->values[c] == (pa_volume_t) -1)
+ if (v->values[c] == PA_VOLUME_INVALID)
return 0;
return 1;
@@ -497,8 +510,6 @@ pa_cvolume *pa_cvolume_remap(pa_cvolume *v, const pa_channel_map *from, const pa
pa_assert(from);
pa_assert(to);
- pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
- pa_return_val_if_fail(pa_channel_map_valid(from), NULL);
pa_return_val_if_fail(pa_channel_map_valid(to), NULL);
pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(v, from), NULL);
@@ -600,8 +611,6 @@ float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map) {
pa_assert(v);
pa_assert(map);
- pa_return_val_if_fail(pa_cvolume_valid(v), 0.0f);
- pa_return_val_if_fail(pa_channel_map_valid(map), 0.0f);
pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(v, map), 0.0f);
if (!pa_channel_map_can_balance(map))
@@ -633,12 +642,10 @@ pa_cvolume* pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, flo
pa_assert(map);
pa_assert(v);
- pa_assert(new_balance >= -1.0f);
- pa_assert(new_balance <= 1.0f);
- pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
- pa_return_val_if_fail(pa_channel_map_valid(map), NULL);
pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(v, map), NULL);
+ pa_return_val_if_fail(new_balance >= -1.0f, NULL);
+ pa_return_val_if_fail(new_balance <= 1.0f, NULL);
if (!pa_channel_map_can_balance(map))
return v;
@@ -679,7 +686,7 @@ pa_cvolume* pa_cvolume_scale(pa_cvolume *v, pa_volume_t max) {
pa_assert(v);
pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
- pa_return_val_if_fail(max != (pa_volume_t) -1, NULL);
+ pa_return_val_if_fail(max != PA_VOLUME_INVALID, NULL);
t = pa_cvolume_max(v);
@@ -698,8 +705,12 @@ pa_cvolume* pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, pa_channel_map
pa_assert(v);
- pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
- pa_return_val_if_fail(max != (pa_volume_t) -1, NULL);
+ pa_return_val_if_fail(max != PA_VOLUME_INVALID, NULL);
+
+ if (!cm)
+ return pa_cvolume_scale(v, max);
+
+ pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(v, cm), NULL);
t = pa_cvolume_max_mask(v, cm, mask);
@@ -750,8 +761,6 @@ float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map) {
pa_assert(v);
pa_assert(map);
- pa_return_val_if_fail(pa_cvolume_valid(v), 0.0f);
- pa_return_val_if_fail(pa_channel_map_valid(map), 0.0f);
pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(v, map), 0.0f);
if (!pa_channel_map_can_fade(map))
@@ -774,12 +783,10 @@ pa_cvolume* pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float
pa_assert(map);
pa_assert(v);
- pa_assert(new_fade >= -1.0f);
- pa_assert(new_fade <= 1.0f);
- pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
- pa_return_val_if_fail(pa_channel_map_valid(map), NULL);
pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(v, map), NULL);
+ pa_return_val_if_fail(new_fade >= -1.0f, NULL);
+ pa_return_val_if_fail(new_fade <= 1.0f, NULL);
if (!pa_channel_map_can_fade(map))
return v;
@@ -827,6 +834,7 @@ pa_cvolume* pa_cvolume_set_position(
pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(cv, map), NULL);
pa_return_val_if_fail(t < PA_CHANNEL_POSITION_MAX, NULL);
+ pa_return_val_if_fail(v != PA_VOLUME_INVALID, NULL);
for (c = 0; c < map->channels; c++)
if (map->map[c] == t) {
@@ -883,6 +891,7 @@ pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc) {
pa_assert(v);
pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
+ pa_return_val_if_fail(inc != PA_VOLUME_INVALID, NULL);
m = pa_cvolume_max(v);
@@ -900,6 +909,7 @@ pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec) {
pa_assert(v);
pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
+ pa_return_val_if_fail(dec != PA_VOLUME_INVALID, NULL);
m = pa_cvolume_max(v);
diff --git a/src/pulse/volume.h b/src/pulse/volume.h
index 543b0af1..c964020a 100644
--- a/src/pulse/volume.h
+++ b/src/pulse/volume.h
@@ -106,11 +106,14 @@ typedef uint32_t pa_volume_t;
/** Normal volume (100%, 0 dB) */
#define PA_VOLUME_NORM ((pa_volume_t) 0x10000U)
-/** Muted volume (0%, -inf dB) */
+/** Muted (minimal valid) volume (0%, -inf dB) */
#define PA_VOLUME_MUTED ((pa_volume_t) 0U)
-/** Maximum volume we can store. \since 0.9.15 */
-#define PA_VOLUME_MAX ((pa_volume_t) UINT32_MAX)
+/** Maximum valid volume we can store. \since 0.9.15 */
+#define PA_VOLUME_MAX ((pa_volume_t) UINT32_MAX-1)
+
+/** Special 'invalid' volume. \since 0.9.16 */
+#define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX)
/** A structure encapsulating a per-channel volume */
typedef struct pa_cvolume {
diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c
index 3c94960c..143db3b2 100644
--- a/src/pulsecore/cli-command.c
+++ b/src/pulsecore/cli-command.c
@@ -328,7 +328,7 @@ static int pa_cli_command_source_outputs(pa_core *c, pa_tokenizer *t, pa_strbuf
static int pa_cli_command_stat(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail) {
char ss[PA_SAMPLE_SPEC_SNPRINT_MAX];
char cm[PA_CHANNEL_MAP_SNPRINT_MAX];
- char s[256];
+ char bytes[PA_BYTES_SNPRINT_MAX];
const pa_mempool_stat *stat;
unsigned k;
pa_sink *def_sink;
@@ -352,22 +352,22 @@ static int pa_cli_command_stat(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_b
pa_strbuf_printf(buf, "Memory blocks currently allocated: %u, size: %s.\n",
(unsigned) pa_atomic_load(&stat->n_allocated),
- pa_bytes_snprint(s, sizeof(s), (unsigned) pa_atomic_load(&stat->allocated_size)));
+ pa_bytes_snprint(bytes, sizeof(bytes), (unsigned) pa_atomic_load(&stat->allocated_size)));
pa_strbuf_printf(buf, "Memory blocks allocated during the whole lifetime: %u, size: %s.\n",
(unsigned) pa_atomic_load(&stat->n_accumulated),
- pa_bytes_snprint(s, sizeof(s), (unsigned) pa_atomic_load(&stat->accumulated_size)));
+ pa_bytes_snprint(bytes, sizeof(bytes), (unsigned) pa_atomic_load(&stat->accumulated_size)));
pa_strbuf_printf(buf, "Memory blocks imported from other processes: %u, size: %s.\n",
(unsigned) pa_atomic_load(&stat->n_imported),
- pa_bytes_snprint(s, sizeof(s), (unsigned) pa_atomic_load(&stat->imported_size)));
+ pa_bytes_snprint(bytes, sizeof(bytes), (unsigned) pa_atomic_load(&stat->imported_size)));
pa_strbuf_printf(buf, "Memory blocks exported to other processes: %u, size: %s.\n",
(unsigned) pa_atomic_load(&stat->n_exported),
- pa_bytes_snprint(s, sizeof(s), (unsigned) pa_atomic_load(&stat->exported_size)));
+ pa_bytes_snprint(bytes, sizeof(bytes), (unsigned) pa_atomic_load(&stat->exported_size)));
pa_strbuf_printf(buf, "Total sample cache size: %s.\n",
- pa_bytes_snprint(s, sizeof(s), (unsigned) pa_scache_total_size(c)));
+ pa_bytes_snprint(bytes, sizeof(bytes), (unsigned) pa_scache_total_size(c)));
pa_strbuf_printf(buf, "Default sample spec: %s\n",
pa_sample_spec_snprint(ss, sizeof(ss), &c->default_sample_spec));
diff --git a/src/pulsecore/core-scache.c b/src/pulsecore/core-scache.c
index fde12ecf..1fb81d0d 100644
--- a/src/pulsecore/core-scache.c
+++ b/src/pulsecore/core-scache.c
@@ -335,12 +335,12 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, pa_volume_t
pass_volume = TRUE;
- if (e->volume_is_set && volume != (pa_volume_t) -1) {
+ if (e->volume_is_set && volume != PA_VOLUME_INVALID) {
pa_cvolume_set(&r, e->sample_spec.channels, volume);
pa_sw_cvolume_multiply(&r, &r, &e->volume);
} else if (e->volume_is_set)
r = e->volume;
- else if (volume != (pa_volume_t) -1)
+ else if (volume != PA_VOLUME_INVALID)
pa_cvolume_set(&r, e->sample_spec.channels, volume);
else
pass_volume = FALSE;
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
index 441b397b..0e40d12b 100644
--- a/src/pulsecore/memblock.c
+++ b/src/pulsecore/memblock.c
@@ -694,7 +694,7 @@ static void memblock_replace_import(pa_memblock *b) {
pa_mempool* pa_mempool_new(pa_bool_t shared, size_t size) {
pa_mempool *p;
- char t1[64], t2[64];
+ char t1[PA_BYTES_SNPRINT_MAX], t2[PA_BYTES_SNPRINT_MAX];
p = pa_xnew(pa_mempool, 1);
diff --git a/src/pulsecore/vector.h b/src/pulsecore/vector.h
index 924e3cb8..9de3b8cd 100644
--- a/src/pulsecore/vector.h
+++ b/src/pulsecore/vector.h
@@ -23,7 +23,8 @@
#include <inttypes.h>
/* First, define HAVE_VECTOR if we have the gcc vector extensions at all */
-#if defined(__SSE2__) || defined(__ALTIVEC__)
+#if defined(__SSE2__)
+ /* || defined(__ALTIVEC__)*/
#define HAVE_VECTOR
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index b8f4ea75..141ab5b1 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -130,7 +130,7 @@ static void complete_action(void) {
}
static void stat_callback(pa_context *c, const pa_stat_info *i, void *userdata) {
- char s[128];
+ char s[PA_BYTES_SNPRINT_MAX];
if (!i) {
pa_log(_("Failed to get statistics: %s"), pa_strerror(pa_context_errno(c)));
quit(1);
@@ -598,7 +598,7 @@ static void get_source_output_info_callback(pa_context *c, const pa_source_outpu
}
static void get_sample_info_callback(pa_context *c, const pa_sample_info *i, int is_last, void *userdata) {
- char t[32], s[PA_SAMPLE_SPEC_SNPRINT_MAX], cv[PA_CVOLUME_SNPRINT_MAX], cvdb[PA_SW_CVOLUME_SNPRINT_DB_MAX], cm[PA_CHANNEL_MAP_SNPRINT_MAX];
+ char t[PA_BYTES_SNPRINT_MAX], s[PA_SAMPLE_SPEC_SNPRINT_MAX], cv[PA_CVOLUME_SNPRINT_MAX], cvdb[PA_SW_CVOLUME_SNPRINT_DB_MAX], cm[PA_CHANNEL_MAP_SNPRINT_MAX];
char *pl;
if (is_last < 0) {