24. [DeepStream 6.1.1 GA] simple demo for adding dewarper support to deepstream-app
Usege: deepstream-app -c source1_dewarper_test.txt
source1_dewarper_test.txt (3.6 KB)
---
.../src/deepstream_config_file_parser.c | 15 ++-
.../common/src/deepstream_source_bin.c | 5 -
.../common/src/deepstream_streammux.c | 5 +-
.../deepstream_app_config_parser.c | 7 +-
.../deepstream_app_config_parser_yaml.cpp | 4 +
diff --git a/apps/deepstream/common/src/deepstream_config_file_parser.c b/apps/deepstream/common/src/deepstream_config_file_parser.c
--- a/apps/deepstream/common/src/deepstream_config_file_parser.c
+++ b/apps/deepstream/common/src/deepstream_config_file_parser.c
@@ -76,6 +76,8 @@ GST_DEBUG_CATEGORY (APP_CFG_PARSER_CAT);
#define CONFIG_GROUP_STREAMMUX_FRAME_NUM_RESET_ON_STREAM_RESET "frame-num-reset-on-stream-reset"
#define CONFIG_GROUP_STREAMMUX_FRAME_NUM_RESET_ON_EOS "frame-num-reset-on-eos"
#define CONFIG_GROUP_STREAMMUX_FRAME_DURATION "frame-duration"
+#define CONFIG_GROUP_STREAMMUX_NUM_SURFACES_PER_FRAME "num-surfaces-per-frame"
+
#define CONFIG_GROUP_STREAMMUX_CONFIG_FILE_PATH "config-file"
#define CONFIG_GROUP_STREAMMUX_SYNC_INPUTS "sync-inputs"
#define CONFIG_GROUP_STREAMMUX_MAX_LATENCY "max-latency"
@@ -742,6 +744,11 @@ parse_streammux (NvDsStreammuxConfig *config, GKeyFile *key_file, gchar *cfg_fil
g_key_file_get_boolean(key_file, CONFIG_GROUP_STREAMMUX,
CONFIG_GROUP_STREAMMUX_ASYNC_PROCESS, &error);
CHECK_ERROR(error);
+ } else if (!g_strcmp0(*key, CONFIG_GROUP_STREAMMUX_NUM_SURFACES_PER_FRAME)) {
+ config->num_surface_per_frame =
+ g_key_file_get_integer(key_file, CONFIG_GROUP_STREAMMUX,
+ CONFIG_GROUP_STREAMMUX_NUM_SURFACES_PER_FRAME, &error);
+ CHECK_ERROR(error);
} else {
NVGSTDS_WARN_MSG_V ("Unknown key '%s' for group [%s]", *key,
CONFIG_GROUP_STREAMMUX);
@@ -1070,8 +1077,12 @@ parse_dewarper (NvDsDewarperConfig * config, GKeyFile * key_file, gchar *cfg_fil
g_key_file_get_integer (key_file, CONFIG_GROUP_DEWARPER,
CONFIG_GROUP_DEWARPER_NUM_SURFACES_PER_FRAME, &error);
CHECK_ERROR (error);
- }
- else {
+ } else if (!g_strcmp0 (*key, CONFIG_GROUP_DEWARPER_SOURCE_ID)) {
+ config->source_id =
+ g_key_file_get_integer (key_file, CONFIG_GROUP_DEWARPER,
+ CONFIG_GROUP_DEWARPER_SOURCE_ID, &error);
+ CHECK_ERROR (error);
+ } else {
NVGSTDS_WARN_MSG_V ("Unknown key '%s' for group [%s]", *key,
CONFIG_GROUP_DEWARPER);
}
diff --git a/apps/deepstream/common/src/deepstream_source_bin.c b/apps/deepstream/common/src/deepstream_source_bin.c
--- a/apps/deepstream/common/src/deepstream_source_bin.c
+++ b/apps/deepstream/common/src/deepstream_source_bin.c
@@ -1527,11 +1527,6 @@ create_multi_source_bin (guint num_sub_bins, NvDsSourceConfig * configs,
goto done;
}
- if(configs->dewarper_config.enable) {
- g_object_set(G_OBJECT(bin->sub_bins[i].dewarper_bin.nvdewarper), "source-id",
- configs[i].source_id, NULL);
- }
-
bin->num_bins++;
}
NVGSTDS_BIN_ADD_GHOST_PAD (bin->bin, bin->streammux, "src");
diff --git a/apps/deepstream/common/src/deepstream_streammux.c b/apps/deepstream/common/src/deepstream_streammux.c
--- a/apps/deepstream/common/src/deepstream_streammux.c
+++ b/apps/deepstream/common/src/deepstream_streammux.c
@@ -92,7 +92,10 @@ set_streammux_properties (NvDsStreammuxConfig *config, GstElement *element)
config->max_latency, NULL);
g_object_set (G_OBJECT (element), "frame-num-reset-on-eos",
config->frame_num_reset_on_eos, NULL);
-
+ if (config->num_surface_per_frame > 1) {
+ g_object_set (G_OBJECT (element), "num-surfaces-per-frame",
+ config->num_surface_per_frame, NULL);
+ }
ret= TRUE;
return ret;
diff --git a/apps/deepstream/sample_apps/deepstream-app/deepstream_app_config_parser.c b/apps/deepstream/sample_apps/deepstream-app/deepstream_app_config_parser.c
--- a/apps/deepstream/sample_apps/deepstream-app/deepstream_app_config_parser.c
+++ b/apps/deepstream/sample_apps/deepstream-app/deepstream_app_config_parser.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -373,6 +373,11 @@ parse_config_file (NvDsConfig *config, gchar *cfg_file_path)
parse_err = !parse_osd (&config->osd_config, cfg_file);
}
+ if (!g_strcmp0 (*group, CONFIG_GROUP_DEWARPER)) {
+ parse_err = !parse_dewarper (&config->multi_source_config[0].dewarper_config,
+ cfg_file, cfg_file_path);
+ }
+
if (!g_strcmp0 (*group, CONFIG_GROUP_PREPROCESS)) {
parse_err =
!parse_preprocess (&config->preprocess_config, cfg_file,
diff --git a/apps/deepstream/sample_apps/deepstream-app/deepstream_app_config_parser_yaml.cpp b/apps/deepstream/sample_apps/deepstream-app/deepstream_app_config_parser_yaml.cpp
--- a/apps/deepstream/sample_apps/deepstream-app/deepstream_app_config_parser_yaml.cpp
+++ b/apps/deepstream/sample_apps/deepstream-app/deepstream_app_config_parser_yaml.cpp
@@ -129,6 +129,7 @@ parse_config_file_yaml (NvDsConfig *config, gchar *cfg_file_path)
std::string sink_str = "sink";
std::string sgie_str = "secondary-gie";
std::string msgcons_str = "message-consumer";
+ std::string dewarper_str = "dewarper";
config->source_list_enabled = FALSE;
@@ -183,6 +184,9 @@ parse_config_file_yaml (NvDsConfig *config, gchar *cfg_file_path)
else if (paramKey == "osd") {
parse_err = !parse_osd_yaml(&config->osd_config, cfg_file_path);
}
+ else if (paramKey.compare(0, dewarper_str.size(), dewarper_str) == 0) {
+ parse_err = !parse_dewarper_yaml (&config->multi_source_config[0].dewarper_config, cfg_file_path);
+ }
else if (paramKey == "pre-process") {
parse_err = !parse_preprocess_yaml(&config->preprocess_config, cfg_file_path);
}