From e719e9ace84300e7c30e5fa63766847ebd55f357 Mon Sep 17 00:00:00 2001 From: Barzan Hayati Date: Tue, 1 Jul 2025 19:28:10 +0000 Subject: [PATCH] Add fps buffer probe --- src/pipeline_manager.cpp | 31 +++++++++++++++++++++++++++++++ src/pipeline_manager.hpp | 2 ++ 2 files changed, 33 insertions(+) diff --git a/src/pipeline_manager.cpp b/src/pipeline_manager.cpp index d0e51e9..cfbf5fe 100644 --- a/src/pipeline_manager.cpp +++ b/src/pipeline_manager.cpp @@ -63,6 +63,30 @@ void PipelineManager::playing_pipeline(int num_sources, char** url_camera) { gst_element_set_state(pipeline, GST_STATE_PLAYING); } +GstPadProbeReturn PipelineManager::buffer_probe(GstPad* pad, + GstPadProbeInfo* info, + gpointer user_data) { + (void)pad; // This explicitly marks it as unused + (void)info; // This explicitly marks it as unused + (void)user_data; // This explicitly marks it as unused + static guint frame_count = 0; + static auto last_time = std::chrono::steady_clock::now(); + + frame_count++; + auto current_time = std::chrono::steady_clock::now(); + auto elapsed = std::chrono::duration_cast( + current_time - last_time) + .count(); + + if (elapsed >= 1000) { // Update every second + g_print("FPS: %ld\n", frame_count * 1000 / elapsed); + frame_count = 0; + last_time = current_time; + } + + return GST_PAD_PROBE_OK; +} + bool PipelineManager::setup_pipeline() { /* Set up the pipeline */ /* add all elements into the pipeline */ @@ -182,6 +206,13 @@ bool PipelineManager::create_pipeline_elements(int num_sources, message_handling->create_message_handler(pipeline, g_run_forever, loop); setup_pipeline(); + // --- BUFFER PROBE FOR FPS --- + GstPad* sink_pad = gst_element_get_static_pad( + nv_video_convert_manager->nvvidconv, "src"); // Or any element's pad + gst_pad_add_probe(sink_pad, GST_PAD_PROBE_TYPE_BUFFER, buffer_probe, NULL, + NULL); + gst_object_unref(sink_pad); + playing_pipeline(num_sources, url_camera); rtsp_streaming_manager->start_rtsp_streaming(); diff --git a/src/pipeline_manager.hpp b/src/pipeline_manager.hpp index 5f8ccf3..32663ce 100644 --- a/src/pipeline_manager.hpp +++ b/src/pipeline_manager.hpp @@ -47,6 +47,8 @@ class PipelineManager { bool setup_pipeline(); void playing_pipeline(int, char **); void set_cuda_device(); + static GstPadProbeReturn buffer_probe(GstPad *, GstPadProbeInfo *, + gpointer); static gboolean event_thread_func(gpointer); ~PipelineManager(); }; \ No newline at end of file