From a6f03db8f6838e76317b26079ec93e01724f3c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Cerveau?= Date: Wed, 3 Jan 2024 13:06:30 +0100 Subject: [PATCH] element: element property special convert for enum and flags In element_property, add special case enum and flags property to use a better value such as nick or the proper u32 flags --- src/gps/element.rs | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/gps/element.rs b/src/gps/element.rs index 0dd5349..8b89485 100644 --- a/src/gps/element.rs +++ b/src/gps/element.rs @@ -156,13 +156,24 @@ impl ElementInfo { } pub fn element_property(element: &gst::Element, property_name: &str) -> anyhow::Result { - let value = element - .property_value(property_name) - .transform::() - .expect("Unable to transform to string") - .get::() - .unwrap_or_default(); - Ok(value) + let value = element.property_value(property_name); + if value.type_().is_a(glib::Type::ENUM) { + let value = value.get::<&glib::EnumValue>().unwrap().nick().to_string(); + Ok(value) + } else if value.type_().is_a(glib::Type::FLAGS) { + let value = value.get::>().unwrap(); + let flags = value.iter().copied().fold(0, |acc, val| acc | val.value()); + + Ok(flags.to_string()) + } else { + let value = value + .transform::() + .expect("Unable to transform to string") + .get::() + .unwrap_or_default() + .to_lowercase(); + Ok(value) + } } pub fn element_property_by_feature_name( @@ -181,7 +192,7 @@ impl ElementInfo { element: &gst::Element, ) -> anyhow::Result> { let mut properties_list = HashMap::new(); - let params = element.class().list_properties(); + let params = element.list_properties(); for param in params.iter() { GPS_INFO!("Property_name {}", param.name());