|
@@ -1,6 +1,8 @@
|
|
|
-use vlc::{Instance, Media};
|
|
|
+use vlc::{Instance, Media, MediaPlayer};
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
+use std::sync::{Arc, Mutex, Condvar};
|
|
|
+
|
|
|
fn main()
|
|
|
-> std::result::Result<(), ()>
|
|
|
{
|
|
@@ -8,13 +10,33 @@ fn main()
|
|
|
.collect::<Vec<String>>();
|
|
|
|
|
|
assert!(args.len() > 1);
|
|
|
-
|
|
|
let filename = args[1].clone();
|
|
|
-
|
|
|
let path = PathBuf::from(filename);
|
|
|
+
|
|
|
let instance = Instance::new().unwrap();
|
|
|
+ let media = Media::new_path(&instance, &path).unwrap();
|
|
|
+ let player = MediaPlayer::new(&instance).unwrap();
|
|
|
+ let evt_mgr = player.event_manager();
|
|
|
+
|
|
|
+ let local_var = Arc::new((Mutex::new(false), Condvar::new()));
|
|
|
+ let libvlc_var = local_var.clone();
|
|
|
+
|
|
|
+ evt_mgr.attach(vlc::EventType::MediaPlayerEndReached, move |event, obj| {
|
|
|
+ let (lock, cond_var) = &*libvlc_var;
|
|
|
+ let mut running = lock.lock().unwrap();
|
|
|
+ *running = false;
|
|
|
+ cond_var.notify_one();
|
|
|
+ }).unwrap();
|
|
|
+
|
|
|
+ let (lock, cond_var) = &*local_var;
|
|
|
+ let mut running = lock.lock().unwrap();
|
|
|
+
|
|
|
+ while !*running
|
|
|
+ {
|
|
|
+ running = cond_var.wait(running).unwrap();
|
|
|
+ }
|
|
|
|
|
|
- let md = Media::new_path(&instance, &path).unwrap();
|
|
|
+ println!(" - Transcode just finished");
|
|
|
|
|
|
Ok(())
|
|
|
}
|