use std;
use capi;
use std::os::raw::{c_char, c_void};
use std::ffi::CString;
use std::ptr::null_mut;
use super::{Context, ContextInternal, ContextSuccessCb};
use ::util::unwrap_optional_callback;
pub use capi::pa_sink_port_info as SinkPortInfoInternal;
pub use capi::pa_sink_info as SinkInfoInternal;
pub use capi::pa_source_port_info as SourcePortInfoInternal;
pub use capi::pa_source_info as SourceInfoInternal;
pub use capi::pa_server_info as ServerInfoInternal;
pub use capi::pa_module_info as ModuleInfoInternal;
pub use capi::pa_client_info as ClientInfoInternal;
#[allow(deprecated)]
pub use capi::pa_card_profile_info as CardProfileInfo;
pub use capi::pa_card_profile_info2 as CardProfileInfo2;
pub use capi::pa_card_port_info as CardPortInfoInternal;
pub use capi::pa_card_info as CardInfoInternal;
pub use capi::pa_sink_input_info as SinkInputInfoInternal;
pub use capi::pa_source_output_info as SourceOutputInfoInternal;
pub use capi::pa_stat_info as StatInfo;
pub use capi::pa_sample_info as SampleInfoInternal;
pub struct Introspector {
pub context: *mut super::ContextInternal,
weak: bool,
}
impl Context {
pub fn introspect(&self) -> Introspector {
unsafe { capi::pa_context_ref(self.ptr) };
Introspector::from_raw(self.ptr)
}
}
impl Introspector {
pub fn from_raw(context: *mut ContextInternal) -> Self {
Self { context: context, weak: false }
}
pub fn from_raw_weak(context: *mut ContextInternal) -> Self {
Self { context: context, weak: true }
}
}
impl Drop for Introspector {
fn drop(&mut self) {
if !self.weak {
unsafe { capi::pa_context_unref(self.context) };
}
self.context = null_mut::<super::ContextInternal>();
}
}
#[repr(C)]
pub struct SinkPortInfo {
pub name: *const c_char,
pub description: *const c_char,
pub priority: u32,
pub available: ::def::PortAvailable,
}
#[repr(C)]
pub struct SinkInfo {
pub name: *const c_char,
pub index: u32,
pub description: *const c_char,
pub sample_spec: ::sample::Spec,
pub channel_map: ::channelmap::Map,
pub owner_module: u32,
pub volume: ::volume::CVolume,
pub mute: i32,
pub monitor_source: u32,
pub monitor_source_name: *const c_char,
pub latency: ::sample::Usecs,
pub driver: *const c_char,
pub flags: ::def::SinkFlagSet,
pub proplist: *mut ::proplist::ProplistInternal,
pub configured_latency: ::sample::Usecs,
pub base_volume: ::volume::Volume,
pub state: ::def::SinkState,
pub n_volume_steps: u32,
pub card: u32,
pub n_ports: u32,
pub ports: *mut *mut SinkPortInfo,
pub active_port: *mut SinkPortInfo,
pub n_formats: u8,
pub formats: *mut *mut ::format::InfoInternal,
}
pub type SinkInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const SinkInfoInternal, eol: i32, userdata: *mut c_void);
impl Introspector {
pub fn get_sink_info_by_name(&self, name: &str,
cb: (SinkInfoCb, *mut c_void)) -> Option<::operation::Operation>
{
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_get_sink_info_by_name(self.context, c_name.as_ptr(),
Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_sink_info_by_index(&self, idx: u32, cb: (SinkInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_sink_info_by_index(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_sink_info_list(&self, cb: (SinkInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_sink_info_list(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_sink_volume_by_index(&self, idx: u32, volume: &::volume::CVolume,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_set_sink_volume_by_index(self.context, idx,
std::mem::transmute(volume), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_sink_volume_by_name(&self, name: &str, volume: &::volume::CVolume,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_sink_volume_by_name(self.context, c_name.as_ptr(),
std::mem::transmute(volume), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_sink_mute_by_index(&self, idx: u32, mute: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_set_sink_mute_by_index(self.context, idx, mute as i32,
cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_sink_mute_by_name(&self, name: &str, mute: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_sink_mute_by_name(self.context, c_name.as_ptr(),
mute as i32, cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn suspend_sink_by_name(&self, sink_name: &str, suspend: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(sink_name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_suspend_sink_by_name(self.context, c_name.as_ptr(),
suspend as i32, cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn suspend_sink_by_index(&self, idx: u32, suspend: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_suspend_sink_by_index(self.context, idx, suspend as i32,
cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_sink_port_by_index(&self, idx: u32, port: &str,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_port = CString::new(port.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_sink_port_by_index(self.context, idx,
c_port.as_ptr(), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_sink_port_by_name(&self, name: &str, port: &str,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let c_port = CString::new(port.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_sink_port_by_name(self.context, c_name.as_ptr(),
c_port.as_ptr(), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
#[repr(C)]
pub struct SourcePortInfo {
pub name: *const c_char,
pub description: *const c_char,
pub priority: u32,
pub available: ::def::PortAvailable,
}
#[repr(C)]
pub struct SourceInfo {
pub name: *const c_char,
pub index: u32,
pub description: *const c_char,
pub sample_spec: ::sample::Spec,
pub channel_map: ::channelmap::Map,
pub owner_module: u32,
pub volume: ::volume::CVolume,
pub mute: i32,
pub monitor_of_sink: u32,
pub monitor_of_sink_name: *const c_char,
pub latency: ::sample::Usecs,
pub driver: *const c_char,
pub flags: ::def::SourceFlagSet,
pub proplist: *mut ::proplist::ProplistInternal,
pub configured_latency: ::sample::Usecs,
pub base_volume: ::volume::Volume,
pub state: ::def::SourceState,
pub n_volume_steps: u32,
pub card: u32,
pub n_ports: u32,
pub ports: *mut *mut SourcePortInfo,
pub active_port: *mut SourcePortInfo,
pub n_formats: u8,
pub formats: *mut *mut ::format::InfoInternal,
}
pub type SourceInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const SourceInfoInternal, eol: i32, userdata: *mut c_void);
impl Introspector {
pub fn get_source_info_by_name(&self, name: &str, cb: (SourceInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_get_source_info_by_name(self.context, c_name.as_ptr(),
Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_source_info_by_index(&self, idx: u32, cb: (SourceInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_source_info_by_index(self.context, idx, Some(cb.0),
cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_source_info_list(&self, cb: (SourceInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_source_info_list(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_source_volume_by_index(&self, idx: u32, volume: &::volume::CVolume,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_set_source_volume_by_index(self.context, idx,
std::mem::transmute(volume), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_source_volume_by_name(&self, name: &str, volume: &::volume::CVolume,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_source_volume_by_name(self.context, c_name.as_ptr(),
std::mem::transmute(volume), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_source_mute_by_index(&self, idx: u32, mute: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_set_source_mute_by_index(self.context, idx, mute as i32,
cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_source_mute_by_name(&self, name: &str, mute: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_source_mute_by_name(self.context, c_name.as_ptr(),
mute as i32, cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn suspend_source_by_name(&self, name: &str, suspend: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_suspend_source_by_name(self.context, c_name.as_ptr(),
suspend as i32, cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn suspend_source_by_index(&self, idx: u32, suspend: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_suspend_source_by_index(self.context, idx,
suspend as i32, cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_source_port_by_index(&self, idx: u32, port: &str,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_port = CString::new(port.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_source_port_by_index(self.context, idx,
c_port.as_ptr(), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_source_port_by_name(&self, name: &str, port: &str,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let c_port = CString::new(port.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_source_port_by_name(self.context, c_name.as_ptr(),
c_port.as_ptr(), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
#[repr(C)]
pub struct ServerInfo {
pub user_name: *const c_char,
pub host_name: *const c_char,
pub server_version: *const c_char,
pub server_name: *const c_char,
pub sample_spec: ::sample::Spec,
pub default_sink_name: *const c_char,
pub default_source_name: *const c_char,
pub cookie: u32,
pub channel_map: ::channelmap::Map,
}
pub type ServerInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const ServerInfoInternal, userdata: *mut c_void);
impl Introspector {
pub fn get_server_info(&self, cb: (ServerInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_server_info(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
#[repr(C)]
pub struct ModuleInfo {
pub index: u32,
pub name: *const c_char,
pub argument: *const c_char,
pub n_used: u32,
#[deprecated]
pub auto_unload: i32,
pub proplist: *mut ::proplist::ProplistInternal,
}
pub type ModuleInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const ModuleInfoInternal, eol: i32, userdata: *mut c_void);
pub type ContextIndexCb = extern "C" fn(c: *mut ContextInternal, idx: u32, userdata: *mut c_void);
impl Introspector {
pub fn get_module_info(&self, idx: u32, cb: (ModuleInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_module_info(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_module_info_list(&self, cb: (ModuleInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_module_info_list(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn load_module(&self, name: &str, argument: &str, cb: (ContextIndexCb, *mut c_void)
) -> Option<::operation::Operation>
{
let c_name = CString::new(name.clone()).unwrap();
let c_arg = CString::new(argument.clone()).unwrap();
let ptr = unsafe { capi::pa_context_load_module(self.context, c_name.as_ptr(),
c_arg.as_ptr(), Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn unload_module(&self, idx: u32, cb: (ContextSuccessCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_unload_module(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
#[repr(C)]
pub struct ClientInfo {
pub index: u32,
pub name: *const c_char,
pub owner_module: u32,
pub driver: *const c_char,
pub proplist: *mut ::proplist::ProplistInternal,
}
pub type ClientInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const ClientInfoInternal, eol: i32, userdata: *mut c_void);
impl Introspector {
pub fn get_client_info(&self, idx: u32, cb: (ClientInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_client_info(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_client_info_list(&self, cb: (ClientInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_client_info_list(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn kill_client(&self, idx: u32, cb: (ContextSuccessCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_kill_client(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
#[repr(C)]
pub struct CardPortInfo {
pub name: *const c_char,
pub description: *const c_char,
pub priority: u32,
pub available: ::def::PortAvailable,
pub direction: ::direction::FlagSet,
pub n_profiles: u32,
#[deprecated]
#[allow(deprecated)]
pub profiles: *mut *mut CardProfileInfo,
pub proplist: *mut ::proplist::ProplistInternal,
pub latency_offset: i64,
pub profiles2: *mut *mut CardProfileInfo2,
}
#[repr(C)]
pub struct CardInfo {
pub index: u32,
pub name: *const c_char,
pub owner_module: u32,
pub driver: *const c_char,
pub n_profiles: u32,
#[deprecated]
#[allow(deprecated)]
pub profiles: *mut CardProfileInfo,
#[deprecated]
#[allow(deprecated)]
pub active_profile: *mut CardProfileInfo,
pub proplist: *mut ::proplist::ProplistInternal,
pub n_ports: u32,
pub ports: *mut *mut CardPortInfo,
pub profiles2: *mut *mut CardProfileInfo2,
pub active_profile2: *mut CardProfileInfo2,
}
pub type CardInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const CardInfoInternal, eol: i32, userdata: *mut c_void);
impl Introspector {
pub fn get_card_info_by_index(&self, idx: u32, cb: (CardInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_card_info_by_index(self.context, idx,
Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_card_info_by_name(&self, name: &str, cb: (CardInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_get_card_info_by_name(self.context, c_name.as_ptr(),
Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_card_info_list(&self, cb: (CardInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_card_info_list(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_card_profile_by_index(&self, idx: u32, profile: &str,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_profile = CString::new(profile.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_card_profile_by_index(self.context, idx,
c_profile.as_ptr(), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_card_profile_by_name(&self, name: &str, profile: &str,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(name.clone()).unwrap();
let c_profile = CString::new(profile.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_card_profile_by_name(self.context, c_name.as_ptr(),
c_profile.as_ptr(), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_port_latency_offset(&self, card_name: &str, port_name: &str, offset: i64,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(card_name.clone()).unwrap();
let c_port = CString::new(port_name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_set_port_latency_offset(self.context, c_name.as_ptr(),
c_port.as_ptr(), offset, cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
#[repr(C)]
pub struct SinkInputInfo {
pub index: u32,
pub name: *const c_char,
pub owner_module: u32,
pub client: u32,
pub sink: u32,
pub sample_spec: ::sample::Spec,
pub channel_map: ::channelmap::Map,
pub volume: ::volume::CVolume,
pub buffer_usec: ::sample::Usecs,
pub sink_usec: ::sample::Usecs,
pub resample_method: *const c_char,
pub driver: *const c_char,
pub mute: i32,
pub proplist: *mut ::proplist::ProplistInternal,
pub corked: i32,
pub has_volume: i32,
pub volume_writable: i32,
pub format: *mut ::format::InfoInternal,
}
pub type SinkInputInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const SinkInputInfoInternal, eol: i32, userdata: *mut c_void);
impl Introspector {
pub fn get_sink_input_info(&self, idx: u32, cb: (SinkInputInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_sink_input_info(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_sink_input_info_list(&self, cb: (SinkInputInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_sink_input_info_list(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn move_sink_input_by_name(&self, idx: u32, sink_name: &str,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(sink_name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_move_sink_input_by_name(self.context, idx,
c_name.as_ptr(), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn move_sink_input_by_index(&self, idx: u32, sink_idx: u32,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_move_sink_input_by_index(self.context, idx, sink_idx,
cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_sink_input_volume(&self, idx: u32, volume: &::volume::CVolume,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_set_sink_input_volume(self.context, idx,
std::mem::transmute(volume), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_sink_input_mute(&self, idx: u32, mute: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_set_sink_input_mute(self.context, idx, mute as i32,
cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn kill_sink_input(&self, idx: u32, cb: (ContextSuccessCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_kill_sink_input(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
#[repr(C)]
pub struct SourceOutputInfo {
pub index: u32,
pub name: *const c_char,
pub owner_module: u32,
pub client: u32,
pub source: u32,
pub sample_spec: ::sample::Spec,
pub channel_map: ::channelmap::Map,
pub buffer_usec: ::sample::Usecs,
pub source_usec: ::sample::Usecs,
pub resample_method: *const c_char,
pub driver: *const c_char,
pub proplist: *mut ::proplist::ProplistInternal,
pub corked: i32,
pub volume: ::volume::CVolume,
pub mute: i32,
pub has_volume: i32,
pub volume_writable: i32,
pub format: *mut ::format::InfoInternal,
}
pub type SourceOutputInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const SourceOutputInfoInternal, eol: i32, userdata: *mut c_void);
impl Introspector {
pub fn get_source_output_info(&self, idx: u32, cb: (SourceOutputInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_source_output_info(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_source_output_info_list(&self, cb: (SourceOutputInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_source_output_info_list(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn move_source_output_by_name(&self, idx: u32, source_name: &str,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let c_name = CString::new(source_name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_move_source_output_by_name(self.context, idx,
c_name.as_ptr(), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn move_source_output_by_index(&self, idx: u32, source_idx: u32,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_move_source_output_by_index(self.context, idx,
source_idx, cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_source_output_volume(&self, idx: u32, volume: &::volume::CVolume,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_set_source_output_volume(self.context, idx,
std::mem::transmute(volume), cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn set_source_output_mute(&self, idx: u32, mute: bool,
cb: Option<(ContextSuccessCb, *mut c_void)>) -> Option<::operation::Operation>
{
let (cb_f, cb_d) = unwrap_optional_callback::<ContextSuccessCb>(cb);
let ptr = unsafe { capi::pa_context_set_source_output_mute(self.context, idx, mute as i32,
cb_f, cb_d) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn kill_source_output(&self, idx: u32, cb: (ContextSuccessCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_kill_source_output(self.context, idx, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
pub type StatInfoCb = extern "C" fn(c: *mut ContextInternal, i: *const StatInfo,
userdata: *mut c_void);
impl Introspector {
pub fn stat(&self, cb: (StatInfoCb, *mut c_void)) -> Option<::operation::Operation> {
let ptr = unsafe { capi::pa_context_stat(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}
#[repr(C)]
pub struct SampleInfo {
pub index: u32,
pub name: *const c_char,
pub volume: ::volume::CVolume,
pub sample_spec: ::sample::Spec,
pub channel_map: ::channelmap::Map,
pub duration: ::sample::Usecs,
pub bytes: u32,
pub lazy: i32,
pub filename: *const c_char,
pub proplist: *mut ::proplist::ProplistInternal,
}
pub type SampleInfoCb = extern "C" fn(c: *mut ContextInternal,
i: *const SampleInfoInternal, eol: i32, userdata: *mut c_void);
impl Introspector {
pub fn get_sample_info_by_name(&self, name: &str, cb: (SampleInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let c_name = CString::new(name.clone()).unwrap();
let ptr = unsafe { capi::pa_context_get_sample_info_by_name(self.context, c_name.as_ptr(),
Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_sample_info_by_index(&self, idx: u32, cb: (SampleInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_sample_info_by_index(self.context, idx, Some(cb.0),
cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
pub fn get_sample_info_list(&self, cb: (SampleInfoCb, *mut c_void)
) -> Option<::operation::Operation>
{
let ptr = unsafe { capi::pa_context_get_sample_info_list(self.context, Some(cb.0), cb.1) };
if ptr.is_null() {
return None;
}
Some(::operation::Operation::from_raw(ptr))
}
}