forked from mirrors/gecko-dev
The "more" is mainly some fixes in the coreaudio backend, including: - serializing more audio operations onto the serial queue - using the correct audio unit scope when querying for its stream format - tightening up some potential races around reinit on certain errors Differential Revision: https://phabricator.services.mozilla.com/D211042
64 lines
2.4 KiB
Rust
64 lines
2.4 KiB
Rust
// Copyright © 2017 Mozilla Foundation
|
|
//
|
|
// This program is made available under an ISC-style license. See the
|
|
// accompanying file LICENSE for details.
|
|
|
|
use cubeb_core::{
|
|
Context, DeviceCollectionRef, DeviceId, DeviceRef, DeviceType, InputProcessingParams, Result,
|
|
Stream, StreamParams, StreamParamsRef,
|
|
};
|
|
use ffi;
|
|
use std::ffi::CStr;
|
|
use std::os::raw::c_void;
|
|
|
|
pub trait ContextOps {
|
|
fn init(context_name: Option<&CStr>) -> Result<Context>;
|
|
fn backend_id(&mut self) -> &CStr;
|
|
fn max_channel_count(&mut self) -> Result<u32>;
|
|
fn min_latency(&mut self, params: StreamParams) -> Result<u32>;
|
|
fn preferred_sample_rate(&mut self) -> Result<u32>;
|
|
fn supported_input_processing_params(&mut self) -> Result<InputProcessingParams>;
|
|
fn enumerate_devices(
|
|
&mut self,
|
|
devtype: DeviceType,
|
|
collection: &DeviceCollectionRef,
|
|
) -> Result<()>;
|
|
fn device_collection_destroy(&mut self, collection: &mut DeviceCollectionRef) -> Result<()>;
|
|
#[allow(clippy::too_many_arguments)]
|
|
fn stream_init(
|
|
&mut self,
|
|
stream_name: Option<&CStr>,
|
|
input_device: DeviceId,
|
|
input_stream_params: Option<&StreamParamsRef>,
|
|
output_device: DeviceId,
|
|
output_stream_params: Option<&StreamParamsRef>,
|
|
latency_frames: u32,
|
|
data_callback: ffi::cubeb_data_callback,
|
|
state_callback: ffi::cubeb_state_callback,
|
|
user_ptr: *mut c_void,
|
|
) -> Result<Stream>;
|
|
fn register_device_collection_changed(
|
|
&mut self,
|
|
devtype: DeviceType,
|
|
cb: ffi::cubeb_device_collection_changed_callback,
|
|
user_ptr: *mut c_void,
|
|
) -> Result<()>;
|
|
}
|
|
|
|
pub trait StreamOps {
|
|
fn start(&mut self) -> Result<()>;
|
|
fn stop(&mut self) -> Result<()>;
|
|
fn position(&mut self) -> Result<u64>;
|
|
fn latency(&mut self) -> Result<u32>;
|
|
fn input_latency(&mut self) -> Result<u32>;
|
|
fn set_volume(&mut self, volume: f32) -> Result<()>;
|
|
fn set_name(&mut self, name: &CStr) -> Result<()>;
|
|
fn current_device(&mut self) -> Result<&DeviceRef>;
|
|
fn set_input_mute(&mut self, mute: bool) -> Result<()>;
|
|
fn set_input_processing_params(&mut self, params: InputProcessingParams) -> Result<()>;
|
|
fn device_destroy(&mut self, device: &DeviceRef) -> Result<()>;
|
|
fn register_device_changed_callback(
|
|
&mut self,
|
|
device_changed_callback: ffi::cubeb_device_changed_callback,
|
|
) -> Result<()>;
|
|
}
|