mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-18 07:45:30 +00:00
Bug 1632093 - mach vendor rust. r=padenot
Depends on D72729 Differential Revision: https://phabricator.services.mozilla.com/D72730
This commit is contained in:
parent
cc6426edd6
commit
94ecd85385
@ -45,7 +45,7 @@ rev = "3541e3818fdc7c2a24f87e3459151a4ce955a67a"
|
||||
[source."https://github.com/djg/cubeb-pulse-rs"]
|
||||
git = "https://github.com/djg/cubeb-pulse-rs"
|
||||
replace-with = "vendored-sources"
|
||||
rev = "8375ed3cd2fb85add5800fa2eb6ec7bfc8e6bbf5"
|
||||
rev = "5eb38163103b0dae86de81cdaf46070bdeedc0d1"
|
||||
|
||||
[source."https://github.com/bytecodealliance/wasmtime"]
|
||||
git = "https://github.com/bytecodealliance/wasmtime"
|
||||
|
6
Cargo.lock
generated
6
Cargo.lock
generated
@ -985,7 +985,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "cubeb-pulse"
|
||||
version = "0.3.0"
|
||||
source = "git+https://github.com/djg/cubeb-pulse-rs?rev=8375ed3cd2fb85add5800fa2eb6ec7bfc8e6bbf5#8375ed3cd2fb85add5800fa2eb6ec7bfc8e6bbf5"
|
||||
source = "git+https://github.com/djg/cubeb-pulse-rs?rev=5eb38163103b0dae86de81cdaf46070bdeedc0d1#5eb38163103b0dae86de81cdaf46070bdeedc0d1"
|
||||
dependencies = [
|
||||
"cubeb-backend",
|
||||
"pulse",
|
||||
@ -3563,7 +3563,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "pulse"
|
||||
version = "0.3.0"
|
||||
source = "git+https://github.com/djg/cubeb-pulse-rs?rev=8375ed3cd2fb85add5800fa2eb6ec7bfc8e6bbf5#8375ed3cd2fb85add5800fa2eb6ec7bfc8e6bbf5"
|
||||
source = "git+https://github.com/djg/cubeb-pulse-rs?rev=5eb38163103b0dae86de81cdaf46070bdeedc0d1#5eb38163103b0dae86de81cdaf46070bdeedc0d1"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"pulse-ffi",
|
||||
@ -3572,7 +3572,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "pulse-ffi"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/djg/cubeb-pulse-rs?rev=8375ed3cd2fb85add5800fa2eb6ec7bfc8e6bbf5#8375ed3cd2fb85add5800fa2eb6ec7bfc8e6bbf5"
|
||||
source = "git+https://github.com/djg/cubeb-pulse-rs?rev=5eb38163103b0dae86de81cdaf46070bdeedc0d1#5eb38163103b0dae86de81cdaf46070bdeedc0d1"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
@ -1 +1 @@
|
||||
{"files":{".editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858",".travis.yml":"0394e2adb041175457685cde5ee05ff04bdab8885fd8a62551f2ff43d9e48872","AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","Cargo.toml":"297f0144bbebcbc2f3b5478fed750f39adb3b60f9d6c273dfa72d9736818423d","LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","README.md":"e6a98ee5630b9ce1a096a2907d095454f2770e298a5b0976ab552cc53ca96cfc","src/backend/context.rs":"33d9fdf1504fe1ae43d301e288daf6eaeabeb47aa0ef86efa135c6d984425fc4","src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","src/backend/intern.rs":"374a9a3bd79fddc47739dda1dbfc5929aea5a91946794fe65fba3c8d130fbda9","src/backend/mod.rs":"06ce9250865abf0ea461f215b128470636d072a6776821efef3caf5a7b992fb9","src/backend/stream.rs":"9f29e85927b670bdb9943cea2c7dc424dad2c3129949542480992ad125c7485f","src/capi.rs":"b2c1be8128cadd36caa65c80950440f9d6f2aa0c24cc7bae6a9eaf6347ac454d","src/lib.rs":"7282560d84b134b09acfd8d6282600982e42fb3557f72454c535637cc26c7bf6"},"package":null}
|
||||
{"files":{".editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858",".travis.yml":"0394e2adb041175457685cde5ee05ff04bdab8885fd8a62551f2ff43d9e48872","AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","Cargo.toml":"297f0144bbebcbc2f3b5478fed750f39adb3b60f9d6c273dfa72d9736818423d","LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","README.md":"e6a98ee5630b9ce1a096a2907d095454f2770e298a5b0976ab552cc53ca96cfc","src/backend/context.rs":"33d9fdf1504fe1ae43d301e288daf6eaeabeb47aa0ef86efa135c6d984425fc4","src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","src/backend/intern.rs":"374a9a3bd79fddc47739dda1dbfc5929aea5a91946794fe65fba3c8d130fbda9","src/backend/mod.rs":"06ce9250865abf0ea461f215b128470636d072a6776821efef3caf5a7b992fb9","src/backend/stream.rs":"8ff67b76b8663a952fe2d2f7d370a05271f156601c929d19caa56fc892a4a4ab","src/capi.rs":"b2c1be8128cadd36caa65c80950440f9d6f2aa0c24cc7bae6a9eaf6347ac454d","src/lib.rs":"7282560d84b134b09acfd8d6282600982e42fb3557f72454c535637cc26c7bf6"},"package":null}
|
@ -7,7 +7,7 @@ use backend::*;
|
||||
use backend::cork_state::CorkState;
|
||||
use cubeb_backend::{ffi, log_enabled, ChannelLayout, DeviceId, DeviceRef, Error, Result,
|
||||
SampleFormat, StreamOps, StreamParamsRef, StreamPrefs};
|
||||
use pulse::{self, ChannelMapExt, SampleSpecExt, StreamLatency, USecExt};
|
||||
use pulse::{self, CVolumeExt, ChannelMapExt, SampleSpecExt, StreamLatency, USecExt};
|
||||
use pulse_ffi::*;
|
||||
use std::{mem, ptr};
|
||||
use std::ffi::{CStr, CString};
|
||||
@ -19,6 +19,8 @@ use self::RingBufferConsumer::*;
|
||||
use self::RingBufferProducer::*;
|
||||
use self::LinearInputBuffer::*;
|
||||
|
||||
const PULSE_NO_GAIN: f32 = -1.0;
|
||||
|
||||
/// Iterator interface to `ChannelLayout`.
|
||||
///
|
||||
/// Iterates each channel in the set represented by `ChannelLayout`.
|
||||
@ -360,7 +362,7 @@ impl<'ctx> PulseStream<'ctx> {
|
||||
output_sample_spec: pulse::SampleSpec::default(),
|
||||
input_sample_spec: pulse::SampleSpec::default(),
|
||||
shutdown: false,
|
||||
volume: 1.0,
|
||||
volume: PULSE_NO_GAIN,
|
||||
state: ffi::CUBEB_STATE_ERROR,
|
||||
input_buffer_manager: None
|
||||
});
|
||||
@ -643,9 +645,47 @@ impl<'ctx> StreamOps for PulseStream<'ctx> {
|
||||
fn set_volume(&mut self, volume: f32) -> Result<()> {
|
||||
match self.output_stream {
|
||||
None => Err(Error::error()),
|
||||
Some(_) => {
|
||||
self.volume = volume;
|
||||
Ok(())
|
||||
Some(ref stm) => {
|
||||
if let Some(ref context) = self.context.context {
|
||||
self.context.mainloop.lock();
|
||||
|
||||
let mut cvol: pa_cvolume = Default::default();
|
||||
|
||||
/* if the pulse daemon is configured to use flat
|
||||
* volumes, apply our own gain instead of changing
|
||||
* the input volume on the sink. */
|
||||
let flags = {
|
||||
match self.context.default_sink_info {
|
||||
Some(ref info) => info.flags,
|
||||
_ => pulse::SinkFlags::empty(),
|
||||
}
|
||||
};
|
||||
|
||||
if flags.contains(pulse::SinkFlags::FLAT_VOLUME) {
|
||||
self.volume = volume;
|
||||
} else {
|
||||
let channels = stm.get_sample_spec().channels;
|
||||
let vol = pulse::sw_volume_from_linear(f64::from(volume));
|
||||
cvol.set(u32::from(channels), vol);
|
||||
|
||||
let index = stm.get_index();
|
||||
|
||||
let context_ptr = self.context as *const _ as *mut _;
|
||||
if let Ok(o) = context.set_sink_input_volume(
|
||||
index,
|
||||
&cvol,
|
||||
context_success,
|
||||
context_ptr,
|
||||
) {
|
||||
self.context.operation_wait(stm, &o);
|
||||
}
|
||||
}
|
||||
|
||||
self.context.mainloop.unlock();
|
||||
Ok(())
|
||||
} else {
|
||||
Err(Error::error())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -910,7 +950,7 @@ impl<'ctx> PulseStream<'ctx> {
|
||||
read_offset += (size / frame_size) * in_frame_size;
|
||||
}
|
||||
|
||||
if self.volume != 1.0 {
|
||||
if self.volume != PULSE_NO_GAIN {
|
||||
let samples = (self.output_sample_spec.channels as usize * size
|
||||
/ frame_size) as isize;
|
||||
|
||||
@ -985,6 +1025,14 @@ fn stream_success(_: &pulse::Stream, success: i32, u: *mut c_void) {
|
||||
stm.context.mainloop.signal();
|
||||
}
|
||||
|
||||
fn context_success(_: &pulse::Context, success: i32, u: *mut c_void) {
|
||||
let ctx = unsafe { &*(u as *mut PulseContext) };
|
||||
if success != 1 {
|
||||
cubeb_log!("context_success ignored failure: {}", success);
|
||||
}
|
||||
ctx.mainloop.signal();
|
||||
}
|
||||
|
||||
fn invalid_format() -> Error {
|
||||
unsafe { Error::from_raw(ffi::CUBEB_ERROR_INVALID_FORMAT) }
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user