extern crate libc;
use std::ffi::c_void;
pub enum AAudioStream {}
pub enum AAudioStreamBuilder {}
pub const UNSPECIFIED: i32 = 0;
pub const SESSION_ID_NONE: i32 = -1;
pub const SESSION_ID_ALLOCATE: i32 = 0;
pub const DIRECTION_OUTPUT: i32 = 0;
pub const DIRECTION_INPUT: i32 = 0;
pub const FORMAT_INVALID: i32 = -1;
pub const FORMAT_PCM_I16: i32 = 1;
pub const FORMAT_PCM_FLOAT: i32 = 2;
pub const SHARING_EXCLUSIVE: i32 = 0;
pub const SHARING_SHARED: i32 = 1;
pub const USAGE_MEDIA: i32 = 1;
pub const USAGE_VOICE_COMMUNICATION: i32 = 2;
pub const USAGE_VOICE_COMMUNICATION_SIGNALLING: i32 = 3;
pub const USAGE_ALARM: i32 = 4;
pub const USAGE_NOTIFICATION: i32 = 5;
pub const USAGE_NOTIFICATION_RINGTONE: i32 = 6;
pub const USAGE_NOTIFICATION_EVENT: i32 = 10;
pub const USAGE_ASSISTANCE_ACCESSIBILITY: i32 = 11;
pub const USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: i32 = 12;
pub const USAGE_ASSISTANCE_SONIFICATION: i32 = 13;
pub const USAGE_GAME: i32 = 14;
pub const USAGE_ASSISTANT: i32 = 16;
pub const USAGE_EMERGENCY: i32 = 1000;
pub const USAGE_SAFETY: i32 = 1001;
pub const USAGE_VEHICLE_STATUS: i32 = 1002;
pub const USAGE_ANNOUNCEMENT: i32 = 1003;
pub const INPUT_PRESET_GENERIC: i32 = 1;
pub const INPUT_PRESET_CAMCORDER: i32 = 5;
pub const INPUT_PRESET_VOICE_RECOGNITION: i32 = 6;
pub const INPUT_PRESET_VOICE_COMMUNICATION: i32 = 7;
pub const INPUT_PRESET_UNPROCESSED: i32 = 9;
pub const INPUT_PRESET_VOICE_PERFORMANCE: i32 = 10;
pub const CONTENT_TYPE_SPEECH: i32 = 1;
pub const CONTENT_TYPE_MUSIC: i32 = 2;
pub const CONTENT_TYPE_MOVIE: i32 = 3;
pub const CONTENT_TYPE_SONIFICATION: i32 = 4;
pub const ALLOW_CAPTURE_BY_ALL: i32 = 1;
pub const ALLOW_CAPTURE_BY_SYSTEM: i32 = 2;
pub const ALLOW_CAPTURE_BY_NONE: i32 = 3;
pub const CALLBACK_CONTINUE: i32 = 0;
pub const CALLBACK_STOP: i32 = 1;
pub const PERFORMANCE_MODE_NONE: i32 = 10;
pub const PERFORMANCE_MODE_POWER_SAVING: i32 = 11;
pub const PERFORMANCE_MODE_LOW_LATENCY: i32 = 12;
pub const STREAM_STATE_UNINITIALIZED: i32 = 0;
pub const STREAM_STATE_UNKNOWN: i32 = 1;
pub const STREAM_STATE_OPEN: i32 = 2;
pub const STREAM_STATE_STARTING: i32 = 3;
pub const STREAM_STATE_STARTED: i32 = 4;
pub const STREAM_STATE_PAUSING: i32 = 5;
pub const STREAM_STATE_PAUSED: i32 = 6;
pub const STREAM_STATE_FLUSHING: i32 = 7;
pub const STREAM_STATE_FLUSHED: i32 = 8;
pub const STREAM_STATE_STOPPING: i32 = 9;
pub const STREAM_STATE_STOPPED: i32 = 10;
pub const STREAM_STATE_CLOSING: i32 = 11;
pub const STREAM_STATE_CLOSED: i32 = 12;
pub const STREAM_STATE_DISCONNECTED: i32 = 13;
pub const OK: i32 = 0;
const ERROR_BASE: i32 = -900;
pub const ERROR_DISCONNECTED: i32 = ERROR_BASE + 1;
pub const ERROR_ILLEGAL_ARGUMENT: i32 = ERROR_BASE + 2;
pub const ERROR_INTERNAL: i32 = ERROR_ILLEGAL_ARGUMENT + 2;
pub const ERROR_INVALID_STATE: i32 = ERROR_INTERNAL + 1;
pub const ERROR_INVALID_HANDLE: i32 = ERROR_INVALID_STATE + 3;
pub const ERROR_UNIMPLEMENTED: i32 = ERROR_INVALID_HANDLE + 2;
pub const ERROR_UNAVAILABLE: i32 = ERROR_UNIMPLEMENTED + 1;
pub const ERROR_NO_FREE_HANDLES: i32 = ERROR_UNIMPLEMENTED + 2;
pub const ERROR_NO_MEMORY: i32 = ERROR_UNIMPLEMENTED + 3;
pub const ERROR_NULL: i32 = ERROR_UNIMPLEMENTED + 4;
pub const ERROR_TIMEOUT: i32 = ERROR_UNIMPLEMENTED + 5;
pub const ERROR_WOULD_BLOCK: i32 = ERROR_UNIMPLEMENTED + 6;
pub const ERROR_INVALID_FORMAT: i32 = ERROR_UNIMPLEMENTED + 7;
pub const ERROR_OUT_OF_RANGE: i32 = ERROR_UNIMPLEMENTED + 8;
pub const ERROR_NO_SERVICE: i32 = ERROR_UNIMPLEMENTED + 9;
pub const ERROR_INVALID_RATE: i32 = ERROR_UNIMPLEMENTED + 10;
pub type DataCallback = Option<
unsafe extern "C" fn(
stream: *mut AAudioStream,
user_data: *mut c_void,
audio_data: *mut c_void,
num_frames: i32,
) -> i32,
>;
pub type ErrorCallback =
Option<unsafe extern "C" fn(stream: *mut AAudioStream, user_data: *mut c_void, error: i32)>;
#[link(name = "aaudio")]
extern "C" {
pub fn AAudio_createStreamBuilder(builder: *mut *mut AAudioStreamBuilder) -> i32;
pub fn AAudioStreamBuilder_setDeviceId(builder: *mut AAudioStreamBuilder, device_id: i32);
pub fn AAudioStreamBuilder_setSampleRate(builder: *mut AAudioStreamBuilder, sample_rate: i32);
pub fn AAudioStreamBuilder_setChannelCount(
builder: *mut AAudioStreamBuilder,
channel_count: i32,
);
pub fn AAudioStreamBuilder_setFormat(builder: *mut AAudioStreamBuilder, format: i32);
pub fn AAudioStreamBuilder_setSharingMode(builder: *mut AAudioStreamBuilder, sharing_mode: i32);
pub fn AAudioStreamBuilder_setDirection(builder: *mut AAudioStreamBuilder, direction: i32);
pub fn AAudioStreamBuilder_setBufferCapacityInFrames(
builder: *mut AAudioStreamBuilder,
num_frames: i32,
);
pub fn AAudioStreamBuilder_setPerformanceMode(builder: *mut AAudioStreamBuilder, mode: i32);
pub fn AAudioStreamBuilder_setUsage(builder: *mut AAudioStreamBuilder, usage: i32);
pub fn AAudioStreamBuilder_setContentType(builder: *mut AAudioStreamBuilder, content_type: i32);
pub fn AAudioStreamBuilder_setInputPreset(builder: *mut AAudioStreamBuilder, input_preset: i32);
pub fn AAudioStreamBuilder_setAllowedCapturePolicy(
builder: *mut AAudioStreamBuilder,
capture_policy: i32,
);
pub fn AAudioStreamBuilder_setSessionId(builder: *mut AAudioStreamBuilder, session_id: i32);
pub fn AAudioStreamBuilder_setPrivacySensitive(
builder: *mut AAudioStreamBuilder,
privacy_sensitive: bool,
);
pub fn AAudioStreamBuilder_setDataCallback(
builder: *mut AAudioStreamBuilder,
callback: DataCallback,
user_data: *mut c_void,
);
pub fn AAudioStreamBuilder_setFramesPerDataCallback(
builder: *mut AAudioStreamBuilder,
num_frames: i32,
);
pub fn AAudioStreamBuilder_setErrorCallback(
builder: *mut AAudioStreamBuilder,
callback: ErrorCallback,
user_data: *mut c_void,
);
pub fn AAudioStreamBuilder_openStream(
builder: *mut AAudioStreamBuilder,
stream: *mut *mut AAudioStream,
) -> i32;
pub fn AAudioStreamBuilder_delete(builder: *mut AAudioStreamBuilder) -> i32;
pub fn AAudioStream_release(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_close(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_requestStart(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_requestPause(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_requestFlush(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_requestStop(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getState(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_waitForStateChange(
stream: *mut AAudioStream,
input_state: i32,
next_state: *mut i32,
timeout_nanoseconds: i64,
) -> i32;
pub fn AAudioStream_read(
stream: *mut AAudioStream,
buffer: *mut c_void,
num_frames: i32,
timeout_nanoseconds: i64,
) -> i32;
pub fn AAudioStream_write(
stream: *mut AAudioStream,
buffer: *const c_void,
num_frames: i32,
timeout_nanoseconds: i64,
) -> i32;
pub fn AAudioStream_setBufferSizeInFrames(stream: *mut AAudioStream, num_frames: i32) -> i32;
pub fn AAudioStream_getBufferSizeInFrames(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getFramesPerBurst(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getBufferCapacityInFrames(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getFramesPerDataCallback(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getXRunCount(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getSampleRate(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getChannelCount(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getDeviceId(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getFormat(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getSharingMode(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getPerformanceMode(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getDirection(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getFramesWritten(stream: *mut AAudioStream) -> i64;
pub fn AAudioStream_getFramesRead(stream: *mut AAudioStream) -> i64;
pub fn AAudioStream_getSessionId(stream: *mut AAudioStream) -> i32;
pub fn AAudioStream_getTimestamp(
stream: *mut AAudioStream,
clockid: libc::clockid_t,
frame_positon: *mut i64,
time_nanoseconds: *mut i64,
) -> i32;
}