From 6936bf65c4ae2bb5189028a7dc115412b77abbf3 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Tue, 28 Feb 2023 14:16:42 +0100 Subject: [PATCH] tracers: queue_levels: add appsrc support Part-of: --- utils/tracers/src/queue_levels/imp.rs | 49 ++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/utils/tracers/src/queue_levels/imp.rs b/utils/tracers/src/queue_levels/imp.rs index 8abc07ea..3a9ac7c7 100644 --- a/utils/tracers/src/queue_levels/imp.rs +++ b/utils/tracers/src/queue_levels/imp.rs @@ -90,8 +90,17 @@ static MULTIQUEUE_TYPE: Lazy = Lazy::new(|| { } }); +static APPSRC_TYPE: Lazy = Lazy::new(|| { + if let Some(queue) = gst::ElementFactory::find("appsrc").and_then(|f| f.load().ok()) { + queue.element_type() + } else { + gst::warning!(CAT, "Can't instantiate appsrc element"); + glib::Type::INVALID + } +}); + fn is_queue_type(type_: glib::Type) -> bool { - [*QUEUE_TYPE, *QUEUE2_TYPE, *MULTIQUEUE_TYPE].contains(&type_) + [*QUEUE_TYPE, *QUEUE2_TYPE, *MULTIQUEUE_TYPE, *APPSRC_TYPE].contains(&type_) } #[derive(Debug)] @@ -180,9 +189,9 @@ struct LogLine { cur_level_bytes: u32, cur_level_time: u64, cur_level_buffers: u32, - max_size_bytes: u32, + max_size_bytes: u64, max_size_time: u64, - max_size_buffers: u32, + max_size_buffers: u64, } #[derive(Default)] @@ -439,9 +448,19 @@ impl QueueLevels { None => return, }; - let max_size_bytes = element.property::("max-size-bytes"); - let max_size_time = element.property::("max-size-time"); - let max_size_buffers = element.property::("max-size-buffers"); + let (max_size_bytes, max_size_time, max_size_buffers) = if element.type_() == *APPSRC_TYPE { + ( + element.property::("max-bytes"), + element.property::("max-time"), + element.property::("max-buffers"), + ) + } else { + ( + element.property::("max-size-bytes") as u64, + element.property::("max-size-time"), + element.property::("max-size-buffers") as u64, + ) + }; if element.type_() == *MULTIQUEUE_TYPE { let get_pad_idx = |pad: &gst::Pad| { @@ -497,9 +516,21 @@ impl QueueLevels { } } } else { - let cur_level_bytes = element.property::("current-level-bytes"); - let cur_level_time = element.property::("current-level-time"); - let cur_level_buffers = element.property::("current-level-buffers"); + let (cur_level_bytes, cur_level_time, cur_level_buffers) = + if element.type_() == *APPSRC_TYPE { + ( + element.property::("current-level-bytes") as u32, + element.property::("current-level-time"), + element.property::("current-level-buffers") as u32, + ) + } else { + ( + element.property::("current-level-bytes"), + element.property::("current-level-time"), + element.property::("current-level-buffers"), + ) + }; + state.log.push(LogLine { timestamp, name,