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
use libc::{c_void, c_char, c_int, c_uint, c_double, uint8_t, uint64_t};
use ::avutil::{AVClass, AVMatrixEncoding, AVFrame};

pub const AVRESAMPLE_MAX_CHANNELS: c_int = 32;

pub type AVAudioResampleContext = c_void;

#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[repr(C)]
pub enum AVMixCoeffType {
	AV_MIX_COEFF_TYPE_Q8,
	AV_MIX_COEFF_TYPE_Q15,
	AV_MIX_COEFF_TYPE_FLT,
	AV_MIX_COEFF_TYPE_NB,
}

#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[repr(C)]
pub enum AVResampleFilterType {
	AV_RESAMPLE_FILTER_TYPE_CUBIC,
	AV_RESAMPLE_FILTER_TYPE_BLACKMAN_NUTTALL,
	AV_RESAMPLE_FILTER_TYPE_KAISER,
}

#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[repr(C)]
pub enum AVResampleDitherMethod {
	AV_RESAMPLE_DITHER_NONE,
	AV_RESAMPLE_DITHER_RECTANGULAR,
	AV_RESAMPLE_DITHER_TRIANGULAR,
	AV_RESAMPLE_DITHER_TRIANGULAR_HP,
	AV_RESAMPLE_DITHER_TRIANGULAR_NS,
	AV_RESAMPLE_DITHER_NB,
}

extern {
	pub fn avresample_version() -> c_uint;
	pub fn avresample_configuration() -> *const c_char;
	pub fn avresample_license() -> *const c_char;

	pub fn avresample_get_class() -> *const AVClass;

	pub fn avresample_alloc_context() -> *mut AVAudioResampleContext;
	pub fn avresample_open(avr: *mut AVAudioResampleContext) -> c_int;
	pub fn avresample_is_open(avr: *mut AVAudioResampleContext) -> c_int;
	pub fn avresample_close(avr: *mut AVAudioResampleContext);
	pub fn avresample_free(avr: *mut *mut AVAudioResampleContext);

	pub fn avresample_build_matrix(in_layout: uint64_t, out_layout: uint64_t, center_mix_level: c_double, surround_mix_level: c_double, lfe_mix_level: c_double, normalize: c_int, matrix: *mut c_double, stride: c_int, matrix_encoding: AVMatrixEncoding) -> c_int;
	pub fn avresample_get_matrix(avr: *mut AVAudioResampleContext, matrix: *mut c_double, stride: c_int) -> c_int;
	pub fn avresample_set_matrix(avr: *mut AVAudioResampleContext, matrix: *const c_double, stride: c_int) -> c_int;
	pub fn avresample_set_channel_mapping(avr: *mut AVAudioResampleContext, channel_map: *const c_int) -> c_int;
	pub fn avresample_set_compensation(avr: *mut AVAudioResampleContext, sample_delta: c_int, compensation_distance: c_int) -> c_int;
	pub fn avresample_get_out_samples(avr: *mut AVAudioResampleContext, in_nb_samples: c_int) -> c_int;
	pub fn avresample_convert(avr: *mut AVAudioResampleContext, output: *mut *mut uint8_t, out_plane_size: c_int, out_samples: c_int, input: *mut *mut uint8_t, in_plane_size: c_int, in_samples: c_int) -> c_int;
	pub fn avresample_get_delay(avr: *mut AVAudioResampleContext) -> c_int;
	pub fn avresample_available(avr: *mut AVAudioResampleContext) -> c_int;
	pub fn avresample_read(avr: *mut AVAudioResampleContext, output: *mut *mut uint8_t, nb_samples: c_int) -> c_int;
	pub fn avresample_convert_frame(avr: *mut AVAudioResampleContext, output: *mut AVFrame, input: *const AVFrame) -> c_int;
	pub fn avresample_config(avr: *mut AVAudioResampleContext, output: *mut AVFrame, input: *const AVFrame) -> c_int;
}