Bug 1518106 - Update cubeb-pulse-rs from upstream to 17c1629. r=kinetik

Differential Revision: https://phabricator.services.mozilla.com/D17400

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Alex Chronopoulos 2019-01-23 19:37:18 +00:00
Родитель 46289fa2a3
Коммит 2f27522cda
4 изменённых файлов: 62 добавлений и 2 удалений

Просмотреть файл

@ -5,4 +5,4 @@ Makefile.in build files for the Mozilla build system.
The cubeb-pulse-rs git repository is: https://github.com/djg/cubeb-pulse-rs.git
The git commit ID used was 100b85828388d4bf8b9713fe5c5dd9dc00d8f24f (2018-10-19 10:32:47 +1300)
The git commit ID used was 17c1629c323ff24d656ff9449bf50d6758aafc1a (2019-01-24 07:50:09 +1300)

Просмотреть файл

@ -17,6 +17,10 @@ mod static_fns {
pub fn pa_get_library_version() -> *const c_char;
pub fn pa_channel_map_can_balance(map: *const pa_channel_map) -> c_int;
pub fn pa_channel_map_init(m: *mut pa_channel_map) -> *mut pa_channel_map;
pub fn pa_channel_map_init_auto(m: *mut pa_channel_map,
ch: u32,
def: pa_channel_map_def_t)
-> *mut pa_channel_map;
pub fn pa_context_connect(c: *mut pa_context,
server: *const c_char,
flags: pa_context_flags_t,
@ -207,6 +211,13 @@ mod dynamic_fns {
}
fp
};
PA_CHANNEL_MAP_INIT_AUTO = {
let fp = dlsym(h, cstr!("pa_channel_map_init_auto"));
if fp.is_null() {
return None;
}
fp
};
PA_CONTEXT_CONNECT = {
let fp = dlsym(h, cstr!("pa_context_connect"));
if fp.is_null() {
@ -745,6 +756,19 @@ mod dynamic_fns {
(::std::mem::transmute::<_, extern "C" fn(*mut pa_channel_map) -> *mut pa_channel_map>(PA_CHANNEL_MAP_INIT))(m)
}
static mut PA_CHANNEL_MAP_INIT_AUTO: *mut ::libc::c_void = 0 as *mut _;
#[inline]
pub unsafe fn pa_channel_map_init_auto(m: *mut pa_channel_map,
ch: u32,
def: pa_channel_map_def_t)
-> *mut pa_channel_map {
(::std::mem::transmute::<_,
extern "C" fn(*mut pa_channel_map,
u32,
pa_channel_map_def_t)
-> *mut pa_channel_map>(PA_CHANNEL_MAP_INIT_AUTO))(m, ch, def)
}
static mut PA_CONTEXT_CONNECT: *mut ::libc::c_void = 0 as *mut _;
#[inline]
pub unsafe fn pa_context_connect(c: *mut pa_context,

Просмотреть файл

@ -593,6 +593,7 @@ impl CVolumeExt for CVolume {
pub trait ChannelMapExt {
fn init() -> ChannelMap;
fn init_auto(ch: u32, def: ffi::pa_channel_map_def_t) -> Option<ChannelMap>;
fn can_balance(&self) -> bool;
}
@ -604,6 +605,17 @@ impl ChannelMapExt for ChannelMap {
}
cm
}
fn init_auto(ch: u32, def: ffi::pa_channel_map_def_t) -> Option<ChannelMap> {
let mut cm = ChannelMap::default();
let r: *mut ffi::pa_channel_map = unsafe {
ffi::pa_channel_map_init_auto(&mut cm, ch, def)
};
if r.is_null() {
None
} else {
Some(cm)
}
}
fn can_balance(&self) -> bool {
unsafe { ffi::pa_channel_map_can_balance(self) > 0 }
}

Просмотреть файл

@ -81,6 +81,22 @@ fn layout_to_channel_map(layout: ChannelLayout) -> pulse::ChannelMap {
cm
}
fn default_layout_for_channels(ch: u32) -> ChannelLayout {
match ch {
1 => ChannelLayout::MONO,
2 => ChannelLayout::STEREO,
3 => ChannelLayout::_3F,
4 => ChannelLayout::QUAD,
5 => ChannelLayout::_3F2,
6 => ChannelLayout::_3F_LFE
| ChannelLayout::SIDE_LEFT
| ChannelLayout::SIDE_RIGHT,
7 => ChannelLayout::_3F3R_LFE,
8 => ChannelLayout::_3F4_LFE,
_ => panic!("channel must be between 1 to 8.")
}
}
pub struct Device(ffi::cubeb_device);
impl Drop for Device {
@ -661,7 +677,15 @@ impl<'ctx> PulseStream<'ctx> {
};
let cm: Option<pa_channel_map> = match stream_params.layout() {
ChannelLayout::UNDEFINED => None,
ChannelLayout::UNDEFINED =>
if stream_params.channels() <= 8
&& pulse::ChannelMap::init_auto(stream_params.channels(), PA_CHANNEL_MAP_DEFAULT).is_none() {
cubeb_log!("Layout undefined and PulseAudio's default layout has not been configured, guess one.");
Some(layout_to_channel_map(default_layout_for_channels(stream_params.channels())))
} else {
cubeb_log!("Layout undefined, PulseAudio will use its default.");
None
},
_ => Some(layout_to_channel_map(stream_params.layout())),
};