mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-26 03:21:03 +00:00
player example: Error management with the failure crate
This commit is contained in:
parent
f6ffa6919f
commit
bdcf0246eb
2 changed files with 17 additions and 17 deletions
|
@ -17,6 +17,7 @@ futures = { version = "0.1", optional = true }
|
||||||
tokio-core = { version = "0.1", optional = true }
|
tokio-core = { version = "0.1", optional = true }
|
||||||
send-cell = "0.1"
|
send-cell = "0.1"
|
||||||
byte-slice-cast = "0.1"
|
byte-slice-cast = "0.1"
|
||||||
|
failure = "0.0.1"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
gst-player = ["gstreamer-player"]
|
gst-player = ["gstreamer-player"]
|
||||||
|
|
|
@ -12,11 +12,14 @@ use std::env;
|
||||||
#[cfg(feature = "gst-player")]
|
#[cfg(feature = "gst-player")]
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
pub mod utils;
|
extern crate failure;
|
||||||
|
|
||||||
|
#[allow(unused_imports)]
|
||||||
|
use failure::Error;
|
||||||
|
|
||||||
#[cfg(feature = "gst-player")]
|
#[cfg(feature = "gst-player")]
|
||||||
fn main_loop(uri: &str) -> Result<(), utils::ExampleError> {
|
fn main_loop(uri: &str) -> Result<(), Error> {
|
||||||
gst::init().map_err(utils::ExampleError::InitFailed)?;
|
gst::init()?;
|
||||||
|
|
||||||
let main_loop = glib::MainLoop::new(None, false);
|
let main_loop = glib::MainLoop::new(None, false);
|
||||||
|
|
||||||
|
@ -25,9 +28,8 @@ fn main_loop(uri: &str) -> Result<(), utils::ExampleError> {
|
||||||
None,
|
None,
|
||||||
Some(&dispatcher.upcast::<gst_player::PlayerSignalDispatcher>()),
|
Some(&dispatcher.upcast::<gst_player::PlayerSignalDispatcher>()),
|
||||||
);
|
);
|
||||||
player
|
|
||||||
.set_property("uri", &glib::Value::from(uri))
|
player.set_property("uri", &glib::Value::from(uri))?;
|
||||||
.expect("Can't set uri property");
|
|
||||||
|
|
||||||
let error = Arc::new(Mutex::new(Ok(())));
|
let error = Arc::new(Mutex::new(Ok(())));
|
||||||
|
|
||||||
|
@ -48,11 +50,7 @@ fn main_loop(uri: &str) -> Result<(), utils::ExampleError> {
|
||||||
let player = &player_clone;
|
let player = &player_clone;
|
||||||
let error = &error_clone;
|
let error = &error_clone;
|
||||||
|
|
||||||
*error.lock().unwrap() = Err(utils::ExampleError::ElementError(
|
*error.lock().unwrap() = Err(err.clone());
|
||||||
"player".to_owned(),
|
|
||||||
err.clone(),
|
|
||||||
"".to_owned(),
|
|
||||||
));
|
|
||||||
|
|
||||||
player.stop();
|
player.stop();
|
||||||
main_loop.quit();
|
main_loop.quit();
|
||||||
|
@ -63,15 +61,10 @@ fn main_loop(uri: &str) -> Result<(), utils::ExampleError> {
|
||||||
|
|
||||||
let guard = error.as_ref().lock().unwrap();
|
let guard = error.as_ref().lock().unwrap();
|
||||||
|
|
||||||
guard.clone()
|
guard.clone().map_err(|e|e.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "gst-player"))]
|
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn main_loop(uri: &str) -> Result<(), utils::ExampleError> {
|
|
||||||
Err(utils::ExampleError::MissingFeature("gst-player"))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let args: Vec<_> = env::args().collect();
|
let args: Vec<_> = env::args().collect();
|
||||||
let uri: &str = if args.len() == 2 {
|
let uri: &str = if args.len() == 2 {
|
||||||
|
@ -80,6 +73,12 @@ fn main() {
|
||||||
panic!("Usage: player uri")
|
panic!("Usage: player uri")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(not(feature = "gst-player"))] {
|
||||||
|
eprintln!("Feature gst-player is required. Please rebuild with --features gst-player");
|
||||||
|
std::process::exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "gst-player")]
|
||||||
match main_loop(uri) {
|
match main_loop(uri) {
|
||||||
Ok(r) => r,
|
Ok(r) => r,
|
||||||
Err(e) => eprintln!("Error! {}", e),
|
Err(e) => eprintln!("Error! {}", e),
|
||||||
|
|
Loading…
Reference in a new issue