NVIDIA DeepStream SDK API Reference

9.2 Release
sources/gst-plugins/gst-nvinfereval/nvds_eval_engine.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
50 #ifndef NVDS_EVAL_ENGINE_H
51 #define NVDS_EVAL_ENGINE_H
52 
53 #include <glib.h>
54 #include <gst/gst.h>
55 #include "nvdsmeta.h" /* NvDsBatchMeta, NvDsFrameMeta */
56 
57 #ifdef __cplusplus
58 extern "C" {
59 #endif
60 
63 
64 /* ------------------------------------------------------------------ */
65 /* Lifecycle */
66 /* ------------------------------------------------------------------ */
69 
70 /* ------------------------------------------------------------------ */
71 /* Property setters — called from GObject set_property (backward compat)
72  *
73  * These values become the defaults for any field not set in the config
74  * file. They must be set BEFORE nvds_eval_engine_prepare() is called.
75  * ------------------------------------------------------------------ */
76 void nvds_eval_engine_set_gt_file (NvdsEvalEngine *eng, const gchar *path);
77 void nvds_eval_engine_set_eval_interval (NvdsEvalEngine *eng, guint interval);
78 void nvds_eval_engine_set_iou_threshold (NvdsEvalEngine *eng, gfloat thresh);
79 void nvds_eval_engine_set_min_ap_margin (NvdsEvalEngine *eng, gfloat margin);
80 void nvds_eval_engine_set_kpi_ap50 (NvdsEvalEngine *eng, gfloat v);
89 
90 void nvds_eval_engine_set_cumulative (NvdsEvalEngine *eng, gboolean v);
94 void nvds_eval_engine_set_exclude_classes (NvdsEvalEngine *eng, const gchar *v);
95 void nvds_eval_engine_set_report_file (NvdsEvalEngine *eng, const gchar *path);
96 void nvds_eval_engine_set_config_file (NvdsEvalEngine *eng, const gchar *path);
97 
98 /* ------------------------------------------------------------------ */
99 /* nvds_eval_engine_prepare
100  *
101  * Called at READY->PAUSED.
102  *
103  * Builds the resolved EvalConfig (property defaults overlaid with config
104  * file if set), stores mm_element, and clears all per-model pair contexts
105  * so each pipeline run starts fresh. GT indices are loaded lazily on the
106  * first frame seen for each model_name.
107  *
108  * @self the GstElement, used for GST_DEBUG / message posting
109  * @mm_element upstream nvmodelmux element (NULL in Mode A);
110  * borrowed reference — lifetime managed by the GObject shell
111  *
112  * Always returns TRUE; individual model GT-load failures are logged as
113  * warnings and those models run in relative-comparison-only mode.
114  * ------------------------------------------------------------------ */
116  GstElement *self,
117  GstElement *mm_element);
118 
119 /* ------------------------------------------------------------------ */
120 /* nvds_eval_engine_process_frame
121  *
122  * Called from the GStreamer chain function for every frame in the batch.
123  * Must not block; all heavy work (epoch boundary) happens inline but is
124  * bounded by the accumulator size.
125  *
126  * @source_id NvDsFrameMeta.source_id
127  * @frame_num InferenceProvenanceMeta.frame_num (Mode B) or
128  * NvDsFrameMeta.frame_num (Mode A)
129  * @role "Primary" or "Shadow" (Mode B) / "Primary" (Mode A)
130  * @model_name logical model name from InferenceProvenanceMeta, or "" (Mode A)
131  * @model_version model version from InferenceProvenanceMeta, or "" (Mode A)
132  * @stream_name InferenceProvenanceMeta.camera_name used as camera_id for GT
133  * lookup; NULL or "" falls back to to_string(source_id)
134  * @obj_meta_list NvDsFrameMeta.obj_meta_list (GList of NvDsObjectMeta*)
135  * ------------------------------------------------------------------ */
137  GstElement *self,
138  guint source_id,
139  guint frame_num,
140  const gchar *role,
141  const gchar *model_name,
142  const gchar *model_version,
143  const gchar *stream_name,
144  GList *obj_meta_list);
145 
146 /* ------------------------------------------------------------------ */
147 /* nvds_eval_engine_attach_gt_overlay
148  *
149  * Attach NvDsDisplayMeta green rectangles for the GT boxes of the given
150  * frame to @frame_meta so nvosd renders them. Call this from the chain
151  * function when the show-gt-overlay flag is set.
152  *
153  * Modular — can be called independently of process_frame. Safe to call
154  * when GT is not loaded (no-op) or when the frame has no GT entry (no-op).
155  *
156  * @batch_meta NvDsBatchMeta for the current buffer (for display-meta pool)
157  * @frame_meta NvDsFrameMeta to attach rects to
158  * @stream_name Camera ID for GT lookup (same value passed to process_frame)
159  * @frame_num Frame number for GT lookup (same value passed to process_frame)
160  * @model_name Model pair to look up GT from ("" for Mode A)
161  * ------------------------------------------------------------------ */
163  GstElement *self,
164  NvDsBatchMeta *batch_meta,
165  NvDsFrameMeta *frame_meta,
166  const gchar *stream_name,
167  guint frame_num,
168  const gchar *model_name);
169 
170 /* ------------------------------------------------------------------ */
171 /* nvds_eval_engine_reset
172  *
173  * Called at PAUSED->READY. Clears all per-model pair contexts and
174  * releases the mm_element reference. Property values and the config
175  * file path are retained so prepare() can be called again on the next
176  * READY->PAUSED transition.
177  * ------------------------------------------------------------------ */
179 
180 /* ------------------------------------------------------------------ */
181 /* nvds_eval_engine_flush
182  *
183  * Force a final ("forced epoch") report for any model context that still
184  * holds a partial, sub-eval_interval epoch. Intended to be called on EOS so
185  * the trailing frames that never reached an interval boundary are still
186  * reported/saved (every such frame was already evaluated as it arrived).
187  * Safe to call multiple times — a context with no pending frames is skipped.
188  * ------------------------------------------------------------------ */
189 void nvds_eval_engine_flush (NvdsEvalEngine *eng, GstElement *self);
190 
191 #ifdef __cplusplus
192 } /* extern "C" */
193 #endif
194 
195 #endif /* NVDS_EVAL_ENGINE_H */
nvds_eval_engine_set_iou_threshold
void nvds_eval_engine_set_iou_threshold(NvdsEvalEngine *eng, gfloat thresh)
nvds_eval_engine_attach_gt_overlay
void nvds_eval_engine_attach_gt_overlay(NvdsEvalEngine *eng, GstElement *self, NvDsBatchMeta *batch_meta, NvDsFrameMeta *frame_meta, const gchar *stream_name, guint frame_num, const gchar *model_name)
nvds_eval_engine_free
void nvds_eval_engine_free(NvdsEvalEngine *eng)
nvds_eval_engine_get_promotion_mode
guint nvds_eval_engine_get_promotion_mode(NvdsEvalEngine *eng)
nvds_eval_engine_set_show_ap_table
void nvds_eval_engine_set_show_ap_table(NvdsEvalEngine *eng, gboolean v)
nvds_eval_engine_get_exclude_undetected
gboolean nvds_eval_engine_get_exclude_undetected(NvdsEvalEngine *eng)
nvds_eval_engine_get_show_ap_table
gboolean nvds_eval_engine_get_show_ap_table(NvdsEvalEngine *eng)
_NvDsBatchMeta
Holds information about a formed batch containing frames from different sources.
Definition: includes/nvdsmeta.h:264
nvds_eval_engine_set_report_file
void nvds_eval_engine_set_report_file(NvdsEvalEngine *eng, const gchar *path)
nvds_eval_engine_set_cumulative
void nvds_eval_engine_set_cumulative(NvdsEvalEngine *eng, gboolean v)
nvds_eval_engine_set_eval_interval
void nvds_eval_engine_set_eval_interval(NvdsEvalEngine *eng, guint interval)
nvds_eval_engine_new
NvdsEvalEngine * nvds_eval_engine_new(void)
nvds_eval_engine_set_kpi_ap50
void nvds_eval_engine_set_kpi_ap50(NvdsEvalEngine *eng, gfloat v)
nvds_eval_engine_get_cumulative
gboolean nvds_eval_engine_get_cumulative(NvdsEvalEngine *eng)
nvds_eval_engine_set_show_gt_overlay
void nvds_eval_engine_set_show_gt_overlay(NvdsEvalEngine *eng, gboolean v)
nvds_eval_engine_set_kpi_precision
void nvds_eval_engine_set_kpi_precision(NvdsEvalEngine *eng, gfloat v)
nvds_eval_engine_reset
void nvds_eval_engine_reset(NvdsEvalEngine *eng)
nvds_eval_engine_process_frame
void nvds_eval_engine_process_frame(NvdsEvalEngine *eng, GstElement *self, guint source_id, guint frame_num, const gchar *role, const gchar *model_name, const gchar *model_version, const gchar *stream_name, GList *obj_meta_list)
nvds_eval_engine_set_kpi_recall
void nvds_eval_engine_set_kpi_recall(NvdsEvalEngine *eng, gfloat v)
nvds_eval_engine_set_exclude_undetected
void nvds_eval_engine_set_exclude_undetected(NvdsEvalEngine *eng, gboolean v)
nvds_eval_engine_set_exclude_classes
void nvds_eval_engine_set_exclude_classes(NvdsEvalEngine *eng, const gchar *v)
nvds_eval_engine_set_promotion_mode
void nvds_eval_engine_set_promotion_mode(NvdsEvalEngine *eng, guint v)
nvds_eval_engine_set_config_file
void nvds_eval_engine_set_config_file(NvdsEvalEngine *eng, const gchar *path)
nvds_eval_engine_set_min_ap_margin
void nvds_eval_engine_set_min_ap_margin(NvdsEvalEngine *eng, gfloat margin)
_NvDsFrameMeta
Holds metadata for a frame in a batch.
Definition: includes/nvdsmeta.h:308
nvds_eval_engine_flush
void nvds_eval_engine_flush(NvdsEvalEngine *eng, GstElement *self)
NvdsEvalEngine
struct NvdsEvalEngine NvdsEvalEngine
Opaque handle; defined as a C++ struct in nvds_eval_engine.cpp.
Definition: sources/gst-plugins/gst-nvinfereval/nvds_eval_engine.h:62
nvds_eval_engine_get_show_gt_overlay
gboolean nvds_eval_engine_get_show_gt_overlay(NvdsEvalEngine *eng)
nvds_eval_engine_prepare
gboolean nvds_eval_engine_prepare(NvdsEvalEngine *eng, GstElement *self, GstElement *mm_element)
nvds_eval_engine_set_gt_file
void nvds_eval_engine_set_gt_file(NvdsEvalEngine *eng, const gchar *path)