зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
46289fa2a3
Коммит
2f27522cda
|
@ -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())),
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче