1use sys;
6use ::MediaPlayer;
7use ::TrackDescription;
8use ::tools::from_cstr;
9
10pub trait MediaPlayerAudioEx {
11 fn get_mute(&self) -> Option<bool>;
12 fn set_mute(&self, bool);
13 fn get_volume(&self) -> i32;
14 fn set_volume(&self, volume: i32) -> Result<(), ()>;
15 fn get_audio_track_description(&self) -> Option<Vec<TrackDescription>>;
16}
17
18impl MediaPlayerAudioEx for MediaPlayer {
19 fn get_mute(&self) -> Option<bool> {
20 let r = unsafe{ sys::libvlc_audio_get_mute(self.ptr) };
21
22 if r == 0 {
23 Some(false)
24 }else if r == -1 {
25 None
26 }else{
27 Some(true)
28 }
29 }
30
31 fn set_mute(&self, status: bool) {
32 unsafe{ sys::libvlc_audio_set_mute(self.ptr, if status { 1 }else{ 0 }) };
33 }
34
35 fn get_volume(&self) -> i32 {
36 unsafe{ sys::libvlc_audio_get_volume(self.ptr) }
37 }
38 fn set_volume(&self, volume: i32) -> Result<(), ()> {
39 unsafe{
40 if sys::libvlc_audio_set_volume(self.ptr, volume) == 0 { Ok(()) }else{ Err(()) }
41 }
42 }
43 fn get_audio_track_description(&self) -> Option<Vec<TrackDescription>> {
44 unsafe{
45 let p0 = sys::libvlc_audio_get_track_description(self.ptr);
46 if p0.is_null() { return None; }
47 let mut td = Vec::new();
48 let mut p = p0;
49
50 while !(*p).p_next.is_null() {
51 td.push(TrackDescription{ id: (*p).i_id, name: from_cstr((*p).psz_name) });
52 p = (*p).p_next;
53 }
54 sys::libvlc_track_description_list_release(p0);
55 Some(td)
56 }
57 }
58
59}