1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//! Bindings to [out123][1].
//!
//! [1]: https://www.mpg123.de/

#![allow(non_camel_case_types)]

extern crate libc;
extern crate mpg123_sys;

use libc::{c_char, c_double, c_int, c_long, c_void, size_t};
use mpg123_sys::mpg123_fmt;

pub enum out123_handle {}

#[derive(Clone, Copy)]
#[repr(C)]
pub enum out123_flags {
    OUT123_HEADPHONES = 0x01,
    OUT123_INTERNAL_SPEAKER = 0x02,
    OUT123_LINE_OUT = 0x04,
    OUT123_QUIET = 0x08,
    OUT123_KEEP_PLAYING = 0x10,
}
pub use out123_flags::*;

#[derive(Clone, Copy)]
#[repr(C)]
pub enum out123_error {
    OUT123_ERR = -1,
    OUT123_OK = 0,
    OUT123_DOOM,
    OUT123_BAD_DRIVER_NAME,
    OUT123_BAD_DRIVER,
    OUT123_NO_DRIVER,
    OUT123_NOT_LIVE,
    OUT123_DEV_PLAY,
    OUT123_DEV_OPEN,
    OUT123_BUFFER_ERROR,
    OUT123_MODULE_ERROR,
    OUT123_ARG_ERROR,
    OUT123_BAD_PARAM,
    OUT123_SET_RO_PARAM,
    OUT123_BAD_HANDLE,
    OUT123_ERRCOUNT,
}
pub use out123_error::*;

#[derive(Clone, Copy)]
#[repr(C)]
pub enum out123_parms {
    OUT123_FLAGS = 1,
    OUT123_PRELOAD,
    OUT123_GAIN,
    OUT123_VERBOSE,
    OUT123_DEVICEBUFFER,
    OUT123_PROPFLAGS,
    OUT123_NAME,
}
pub use out123_parms::*;

#[derive(Clone, Copy)]
#[repr(C)]
pub enum out123_propflags {
    OUT123_PROP_LIVE = 0x01,
    OUT123_PROP_PERSISTENT = 0x02,
}
pub use out123_propflags::*;

extern "C" {
    pub fn out123_new() -> *mut out123_handle;
    pub fn out123_del(ao: *mut out123_handle);
    pub fn out123_strerror(ao: *mut out123_handle) -> *const c_char;
    pub fn out123_errcode(ao: *mut out123_handle) -> c_int;
    pub fn out123_plain_strerror(errcode: c_int) -> *const c_char;
    pub fn out123_set_buffer(ao: *mut out123_handle, buffer_bytes: size_t) -> c_int;
    pub fn out123_param(
        ao: *mut out123_handle,
        code: out123_parms,
        value: c_long,
        fvalue: c_double,
        svalue: *const c_char,
    ) -> c_int;
    pub fn out123_getparam(
        ao: *mut out123_handle,
        code: out123_parms,
        ret_value: *mut c_long,
        ret_fvalue: *mut c_double,
        ret_svalue: *mut *mut c_char,
    ) -> c_int;
    pub fn out123_param_from(ao: *mut out123_handle, from_ao: *mut out123_handle) -> c_int;
    pub fn out123_drivers(
        ao: *mut out123_handle,
        names: *mut *mut *mut c_char,
        descr: *mut *mut *mut c_char,
    ) -> c_int;
    pub fn out123_open(
        ao: *mut out123_handle,
        driver: *const c_char,
        device: *const c_char,
    ) -> c_int;
    pub fn out123_driver_info(
        ao: *mut out123_handle,
        driver: *mut *mut c_char,
        device: *mut *mut c_char,
    ) -> c_int;
    pub fn out123_close(ao: *mut out123_handle);
    pub fn out123_encodings(ao: *mut out123_handle, rate: c_long, channels: c_int) -> c_int;
    pub fn out123_encsize(encoding: c_int) -> c_int;
    pub fn out123_formats(
        ao: *mut out123_handle,
        rates: *const c_long,
        ratecount: c_int,
        minchannels: c_int,
        maxchannels: c_int,
        fmtlist: *mut *mut mpg123_fmt,
    ) -> c_int;
    pub fn out123_enc_list(enclist: *mut *mut c_int) -> c_int;
    pub fn out123_enc_byname(name: *const c_char) -> c_int;
    pub fn out123_enc_name(encoding: c_int) -> *const c_char;
    pub fn out123_enc_longname(encoding: c_int) -> *const c_char;
    pub fn out123_start(
        ao: *mut out123_handle,
        rate: c_long,
        channels: c_int,
        encoding: c_int,
    ) -> c_int;
    pub fn out123_pause(ao: *mut out123_handle);
    pub fn out123_continue(ao: *mut out123_handle);
    pub fn out123_stop(ao: *mut out123_handle);
    pub fn out123_play(ao: *mut out123_handle, buffer: *mut c_void, bytes: size_t) -> size_t;
    pub fn out123_drop(ao: *mut out123_handle);
    pub fn out123_drain(ao: *mut out123_handle);
    pub fn out123_ndrain(ao: *mut out123_handle, bytes: size_t);
    pub fn out123_buffered(ao: *mut out123_handle) -> size_t;
    pub fn out123_getformat(
        ao: *mut out123_handle,
        rate: *mut c_long,
        channels: *mut c_int,
        encoding: *mut c_int,
        framesize: *mut c_int,
    ) -> c_int;
}