diff --git a/src/gps/player.rs b/src/gps/player.rs index 8346f45..0973c4b 100644 --- a/src/gps/player.rs +++ b/src/gps/player.rs @@ -61,6 +61,28 @@ impl PlayerWeak { } } +fn gst_log_handler( + category: gst::DebugCategory, + level: gst::DebugLevel, + file: &glib::GStr, + function: &glib::GStr, + line: u32, + _obj: Option<&gst::LoggedObject>, + message: &gst::DebugMessage, +) { + let log_message = format!( + "{}\t{}\t{}:{}:{}\t{}", + level, + category.name(), + line, + file.as_str(), + function.as_str(), + message.get().unwrap().as_str() + ); + + GPS_GST_LOG!("{}", log_message); +} + #[derive(Debug)] pub struct PlayerInner { app: RefCell>, @@ -79,7 +101,7 @@ impl Player { n_video_sink: Cell::new(0), bus_watch_guard: RefCell::new(None), })); - + gst::debug_add_log_function(gst_log_handler); Ok(pipeline) } @@ -105,7 +127,7 @@ impl Player { } else { ElementInfo::element_update_rank("gtk4paintablesink", gst::Rank::Marginal); } - + gst::debug_set_threshold_from_string(settings::Settings::gst_log_level().as_str(), true); // Create pipeline from the description let pipeline = gst::parse_launch(description)?; let pipeline = pipeline.downcast::(); @@ -282,7 +304,9 @@ impl Player { fn on_pipeline_message(&self, msg: &gst::MessageRef) { use gst::MessageView; - GPS_MSG!("{:?}", msg.structure()); + if let Some(message) = msg.structure() { + GPS_MSG_LOG!("{:?}", message); + } match msg.view() { MessageView::Eos(_) => { GPS_INFO!("EOS received"); diff --git a/src/logger.rs b/src/logger.rs index 306bb78..f10bc66 100644 --- a/src/logger.rs +++ b/src/logger.rs @@ -92,7 +92,7 @@ macro_rules! GPS_DEBUG ( ); #[macro_export] -macro_rules! GPS_MSG ( +macro_rules! GPS_MSG_LOG ( () => ($crate::print!("\n")); ($($arg:tt)*) => ({ logger::pring_msg_logger(logger::LogType::Message, format_args!($($arg)*).to_string()); diff --git a/src/settings.rs b/src/settings.rs index efb26c7..473b69e 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -70,6 +70,16 @@ impl Settings { path } + pub fn gst_log_level() -> String { + let settings = Settings::load_settings(); + let binding = "0".to_string(); + let level = settings + .preferences + .get("gst_log_level") + .unwrap_or(&binding); + level.clone() + } + pub fn set_recent_pipeline_description(pipeline: &str) { let mut settings = Settings::load_settings(); settings.recent_pipeline = pipeline.to_string(); diff --git a/src/ui/preferences.rs b/src/ui/preferences.rs index a91f6a4..cf7b41b 100644 --- a/src/ui/preferences.rs +++ b/src/ui/preferences.rs @@ -82,5 +82,16 @@ pub fn display_settings(app: &GPSApp) { dialog.close(); }); + let widget = gtk::Entry::new(); + widget.set_text(settings::Settings::gst_log_level().as_str()); + widget.connect_changed(glib::clone!(@weak widget => move |c| { + let mut settings = settings::Settings::load_settings(); + settings.preferences.insert("gst_log_level".to_string(), c.text().to_string()); + settings::Settings::save_settings(&settings); + })); + let widget = widget + .dynamic_cast::() + .expect("Should be a widget"); + add_settings_widget(&grid, "GST Log level", &widget, 2); dialog.show(); }