Add several methods to MediaPlayer
							parent
							
								
									9a60821b9d
								
							
						
					
					
						commit
						3b08997e1f
					
				
							
								
								
									
										15
									
								
								src/enums.rs
								
								
								
								
							
							
						
						
									
										15
									
								
								src/enums.rs
								
								
								
								
							| 
						 | 
					@ -61,6 +61,21 @@ pub enum TrackType {
 | 
				
			||||||
    Text    = 2
 | 
					    Text    = 2
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[repr(C)]
 | 
				
			||||||
 | 
					#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
 | 
				
			||||||
 | 
					pub enum Position {
 | 
				
			||||||
 | 
					    Disable = -1,
 | 
				
			||||||
 | 
					    Center,
 | 
				
			||||||
 | 
					    Left,
 | 
				
			||||||
 | 
					    Right,
 | 
				
			||||||
 | 
					    Top,
 | 
				
			||||||
 | 
					    TopLeft,
 | 
				
			||||||
 | 
					    TopRight,
 | 
				
			||||||
 | 
					    Bottom,
 | 
				
			||||||
 | 
					    BottomLeft,
 | 
				
			||||||
 | 
					    BottomRight,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// #[repr(C)]
 | 
					// #[repr(C)]
 | 
				
			||||||
// #[derive(Clone, Copy, PartialEq, Eq, Debug)]
 | 
					// #[derive(Clone, Copy, PartialEq, Eq, Debug)]
 | 
				
			||||||
// pub enum ParseFlag {
 | 
					// pub enum ParseFlag {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								src/ffi.rs
								
								
								
								
							
							
						
						
									
										18
									
								
								src/ffi.rs
								
								
								
								
							| 
						 | 
					@ -304,20 +304,7 @@ pub enum libvlc_navigate_mode_t {
 | 
				
			||||||
    libvlc_navigate_right,
 | 
					    libvlc_navigate_right,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[repr(C)]
 | 
					pub use Position as libvlc_position_t;
 | 
				
			||||||
#[derive(Clone, Copy, Debug)]
 | 
					 | 
				
			||||||
pub enum libvlc_position_t {
 | 
					 | 
				
			||||||
    libvlc_position_disable = -1,
 | 
					 | 
				
			||||||
    libvlc_position_center,
 | 
					 | 
				
			||||||
    libvlc_position_left,
 | 
					 | 
				
			||||||
    libvlc_position_right,
 | 
					 | 
				
			||||||
    libvlc_position_top,
 | 
					 | 
				
			||||||
    libvlc_position_top_left,
 | 
					 | 
				
			||||||
    libvlc_position_top_right,
 | 
					 | 
				
			||||||
    libvlc_position_bottom,
 | 
					 | 
				
			||||||
    libvlc_position_bottom_left,
 | 
					 | 
				
			||||||
    libvlc_position_bottom_right,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[repr(C)]
 | 
					#[repr(C)]
 | 
				
			||||||
#[derive(Clone, Copy, Debug)]
 | 
					#[derive(Clone, Copy, Debug)]
 | 
				
			||||||
| 
						 | 
					@ -442,7 +429,10 @@ extern "C" {
 | 
				
			||||||
    pub fn libvlc_media_player_set_chapter(p_mi: *mut libvlc_media_player_t, i_chapter: c_int);
 | 
					    pub fn libvlc_media_player_set_chapter(p_mi: *mut libvlc_media_player_t, i_chapter: c_int);
 | 
				
			||||||
    pub fn libvlc_media_player_get_chapter(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
					    pub fn libvlc_media_player_get_chapter(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
				
			||||||
    pub fn libvlc_media_player_get_chapter_count(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
					    pub fn libvlc_media_player_get_chapter_count(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
				
			||||||
 | 
					    pub fn libvlc_media_player_will_play(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
				
			||||||
    pub fn libvlc_media_player_set_title(p_mi: *mut libvlc_media_player_t, i_title: c_int);
 | 
					    pub fn libvlc_media_player_set_title(p_mi: *mut libvlc_media_player_t, i_title: c_int);
 | 
				
			||||||
 | 
					    pub fn libvlc_media_player_get_chapter_count_for_title(
 | 
				
			||||||
 | 
					        p_mi: *mut libvlc_media_player_t, i_title: c_int) -> c_int;
 | 
				
			||||||
    pub fn libvlc_media_player_get_title(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
					    pub fn libvlc_media_player_get_title(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
				
			||||||
    pub fn libvlc_media_player_get_title_count(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
					    pub fn libvlc_media_player_get_title_count(p_mi: *mut libvlc_media_player_t) -> c_int;
 | 
				
			||||||
    pub fn libvlc_media_player_previous_chapter(p_mi: *mut libvlc_media_player_t);
 | 
					    pub fn libvlc_media_player_previous_chapter(p_mi: *mut libvlc_media_player_t);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ use ::Instance;
 | 
				
			||||||
use ::Media;
 | 
					use ::Media;
 | 
				
			||||||
use ::EventManager;
 | 
					use ::EventManager;
 | 
				
			||||||
use ::libc::{c_void, c_uint};
 | 
					use ::libc::{c_void, c_uint};
 | 
				
			||||||
 | 
					use ::enums::{State, Position};
 | 
				
			||||||
use std::mem::transmute;
 | 
					use std::mem::transmute;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// A LibVLC media player plays one media (usually in a custom drawable).
 | 
					/// A LibVLC media player plays one media (usually in a custom drawable).
 | 
				
			||||||
| 
						 | 
					@ -149,6 +150,167 @@ impl MediaPlayer {
 | 
				
			||||||
        let hwnd = unsafe{ ffi::libvlc_media_player_get_hwnd(self.ptr) };
 | 
					        let hwnd = unsafe{ ffi::libvlc_media_player_get_hwnd(self.ptr) };
 | 
				
			||||||
        if hwnd.is_null() { None }else{ Some(hwnd) }
 | 
					        if hwnd.is_null() { None }else{ Some(hwnd) }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get the current movie time (in ms).
 | 
				
			||||||
 | 
					    pub fn get_time(&self) -> Option<i64> {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let t = ffi::libvlc_media_player_get_time(self.ptr);
 | 
				
			||||||
 | 
					            if t == -1 { None }else{ Some(t) }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set the movie time (in ms).
 | 
				
			||||||
 | 
					    /// This has no effect if no media is being played. Not all formats and protocols support this.
 | 
				
			||||||
 | 
					    pub fn set_time(&self, time: i64) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_set_time(self.ptr, time); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get movie position as percentage between 0.0 and 1.0.
 | 
				
			||||||
 | 
					    pub fn get_position(&self) -> Option<f32> {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let pos = ffi::libvlc_media_player_get_position(self.ptr);
 | 
				
			||||||
 | 
					            if pos == -1f32 { None }else{ Some(pos) }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set movie position as percentage between 0.0 and 1.0.
 | 
				
			||||||
 | 
					    /// This has no effect if playback is not enabled. This might not work depending on the underlying input format and protocol.
 | 
				
			||||||
 | 
					    pub fn set_position(&self, pos: f32) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_set_position(self.ptr, pos); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set movie chapter (if applicable).
 | 
				
			||||||
 | 
					    pub fn set_chapter(&self, chapter: i32) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_set_chapter(self.ptr, chapter); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get movie chapter.
 | 
				
			||||||
 | 
					    pub fn get_chapter(&self) -> Option<i32> {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let c = ffi::libvlc_media_player_get_chapter(self.ptr);
 | 
				
			||||||
 | 
					            if c == -1 { None }else{ Some(c) }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get movie chapter count.
 | 
				
			||||||
 | 
					    pub fn chapter_count(&self) -> Option<i32> {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let c = ffi::libvlc_media_player_get_chapter_count(self.ptr);
 | 
				
			||||||
 | 
					            if c == -1 { None }else{ Some(c) }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Is the player able to play.
 | 
				
			||||||
 | 
					    pub fn will_play(&self) -> bool {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let b = ffi::libvlc_media_player_will_play(self.ptr);
 | 
				
			||||||
 | 
					            if b == 0 { false }else{ true }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get title chapter count.
 | 
				
			||||||
 | 
					    pub fn chapter_count_for_title(&self, title: i32) -> Option<i32> {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let c = ffi::libvlc_media_player_get_chapter_count_for_title(self.ptr, title);
 | 
				
			||||||
 | 
					            if c == -1 { None }else{ Some(c) }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set movie title.
 | 
				
			||||||
 | 
					    pub fn set_title(&self, title: i32) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_set_title(self.ptr, title); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get movie title.
 | 
				
			||||||
 | 
					    pub fn get_title(&self) -> Option<i32> {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let t = ffi::libvlc_media_player_get_title(self.ptr);
 | 
				
			||||||
 | 
					            if t == -1 { None }else{ Some(t) }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get movie title count.
 | 
				
			||||||
 | 
					    pub fn title_count(&self) -> Option<i32> {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let t = ffi::libvlc_media_player_get_title_count(self.ptr);
 | 
				
			||||||
 | 
					            if t == -1 { Some(t) } else { None }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set previous chapter (if applicable)
 | 
				
			||||||
 | 
					    pub fn previous_chapter(&self) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_previous_chapter(self.ptr); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set next chapter (if applicable)
 | 
				
			||||||
 | 
					    pub fn next_chapter(&self) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_next_chapter(self.ptr); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get the requested movie play rate.
 | 
				
			||||||
 | 
					    pub fn get_rate(&self) -> f32 {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_get_rate(self.ptr) }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set movie play rate.
 | 
				
			||||||
 | 
					    pub fn set_rate(&self, rate: f32) -> Result<(),()> {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            if ffi::libvlc_media_player_set_rate(self.ptr, rate) == -1 {
 | 
				
			||||||
 | 
					                Err(())
 | 
				
			||||||
 | 
					            }else{
 | 
				
			||||||
 | 
					                Ok(())
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get current movie state.
 | 
				
			||||||
 | 
					    pub fn state(&self) -> State {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_get_state(self.ptr) }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// How many video outputs does this media player have?
 | 
				
			||||||
 | 
					    pub fn has_vout(&self) -> u32 {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_has_vout(self.ptr) }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Is this media player seekable?
 | 
				
			||||||
 | 
					    pub fn is_seekable(&self) -> bool {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let b = ffi::libvlc_media_player_is_seekable(self.ptr);
 | 
				
			||||||
 | 
					            if b == 0 { false }else{ true }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Can this media player be paused?
 | 
				
			||||||
 | 
					    pub fn can_pause(&self) -> bool {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let b = ffi::libvlc_media_player_can_pause(self.ptr);
 | 
				
			||||||
 | 
					            if b == 0 { false }else{ true }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Check if the current program is scrambled.
 | 
				
			||||||
 | 
					    pub fn program_scrambled(&self) -> bool {
 | 
				
			||||||
 | 
					        unsafe{
 | 
				
			||||||
 | 
					            let b = ffi::libvlc_media_player_program_scrambled(self.ptr);
 | 
				
			||||||
 | 
					            if b == 0 { false }else{ true }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Display the next frame (if supported)
 | 
				
			||||||
 | 
					    pub fn next_frame(&self) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_next_frame(self.ptr); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Navigate through DVD Menu.
 | 
				
			||||||
 | 
					    pub fn navigate(&self, navigate: u32) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_navigate(self.ptr, navigate); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set if, and how, the video title will be shown when media is played.
 | 
				
			||||||
 | 
					    pub fn set_video_title_display(&self, position: Position, timeout: u32) {
 | 
				
			||||||
 | 
					        unsafe{ ffi::libvlc_media_player_set_video_title_display(self.ptr, position, timeout); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Drop for MediaPlayer {
 | 
					impl Drop for MediaPlayer {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue