NVIDIA DeepStream SDK API Reference

8.0 Release
lidar_file_config.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: LicenseRef-NvidiaProprietary
4  *
5  * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
6  * property and proprietary rights in and to this material, related
7  * documentation and any modifications thereto. Any use, reproduction,
8  * disclosure or distribution of this material and related documentation
9  * without an express license agreement from NVIDIA CORPORATION or
10  * its affiliates is strictly prohibited.
11  */
12 
13 
14 #ifndef _DS3D_DATALOADER_LIDARSOURCE_CONFIG_H
15 #define _DS3D_DATALOADER_LIDARSOURCE_CONFIG_H
16 
17 #include <ds3d/common/common.h>
18 #include <ds3d/common/func_utils.h>
19 
21 #include "ds3d/common/idatatype.h"
22 
23 #define _PATH_MAX 4096
24 
25 namespace ds3d { namespace impl { namespace lidarsource {
26 
27 struct DataParas {
28  std::string location;
29  uint64_t pts;
30 };
31 
32 struct Config {
34  std::string dataConfigFilePath = "";
35  std::string realPath = "";
37  int gpuId = 0;
38  std::vector<std::string> datamapKey;
39  uint32_t pointNums = 0;
40  uint32_t elementSize = 4;
41  uint32_t elementStride = 0;
42  bool fixedPointsNum = true;
44  std::vector<std::deque<std::map<uint64_t, std::string>>> dataParas;
45  uint64_t lastFileTimestamp = 0;
46  uint32_t memPoolSize = 4;
47  bool fileLoop = false;
48  uint64_t frameDuration = 0;
49  uint32_t sourceId = 0;
50 };
51 
52 inline DataType getDataType(const std::string& dataType)
53 {
55  if(dataType == "FP32") {
56  ret = DataType::kFp32;
57  } else {
58  LOG_WARNING("unsupported datatype: %s, fallback to FP32", dataType.c_str());
59  }
60 
61  return ret;
62 }
63 
65 {
66  char absRealFilePath[_PATH_MAX + 1];
67  std::map<uint64_t, std::string> dataParas;
68  std::deque<std::map<uint64_t, std::string>> dataParasQueue;
69  YAML::Node node = YAML::LoadFile(config.realPath);
70  const YAML::Node& listNode = node["source-list"];
71  uint64_t timestampPrev = 0;
72  for (std::size_t i = 0; i < listNode.size(); i++) {
73  const YAML::Node& kvs = listNode[i];
74  for (const auto& kv : kvs) {
75  uint64_t timestamp = kv.first.as<uint64_t>();
76  std::string filename = kv.second.as<std::string>();
77  std::string absFilepath = "";
78  if (filename[0] == '/') {
79  absFilepath = filename;
80  } else {
81  int pos = config.realPath.find_last_of("/");
82  std::string tmpPath = config.realPath.substr(0, pos+1);
83  tmpPath = tmpPath + filename;
84  if (!realpath(tmpPath.c_str(), absRealFilePath)) {
85  if (errno != ENOENT) {
86  LOG_WARNING("Your config file path is not right!");
87  return ErrCode::kNotFound;
88  }
89  }
90  absFilepath = absRealFilePath;
91  LOG_DEBUG("lidar data path %s",absFilepath.c_str());
92  }
93  dataParas[timestamp] = absFilepath;
94  timestampPrev = config.lastFileTimestamp;
95  config.lastFileTimestamp = timestamp;
96  }
97  dataParasQueue.push_back(dataParas);
98  }
99 
100  config.dataParas.push_back(dataParasQueue);
101 
102  if (listNode.size() > 1) {
103  config.frameDuration = config.lastFileTimestamp - timestampPrev;
104  } else {
105  // default to 100ms
106  config.frameDuration = 100;
107  }
108 
109  return ErrCode::kGood;
110 }
111 
112 inline ErrCode
113 parseConfig(const std::string& content, const std::string& path, Config& config)
114 {
116  config::parseComponentConfig(content, path, config.compConfig),
117  "parse lidarsource component content failed");
118  char absRealFilePath[_PATH_MAX + 1];
119  YAML::Node node = YAML::Load(config.compConfig.configBody);
120 
121  if (node["data_config_file"]) {
122  auto lidarDataNode = node["data_config_file"];
123  std::vector<std::string> lidarDataPaths;
124  if (lidarDataNode.IsSequence()) {
125  lidarDataPaths = lidarDataNode.as<std::vector<std::string>>();
126  } else {
127  // There is only one lidar data
128  lidarDataPaths.resize(1);
129  lidarDataPaths[0] = lidarDataNode.as<std::string>();
130  }
131  for (const auto& item : lidarDataPaths) {
132  config.dataConfigFilePath = item;
133  if (config.dataConfigFilePath[0] == '/') {
134  config.realPath = config.dataConfigFilePath;
135  LOG_DEBUG("config path %s",config.realPath.c_str());
136  } else {
137  if (!realpath(path.c_str(), absRealFilePath)) {
138  if (errno != ENOENT) {
139  LOG_WARNING("Your config file path is not right!");
140  return ErrCode::kNotFound;
141  }
142  }
143  config.realPath = absRealFilePath;
144  int pos = config.realPath.find_last_of("/");
145  std::string tmpPath = config.realPath.substr(0, pos+1);
146  config.realPath = tmpPath + config.dataConfigFilePath;
147  LOG_DEBUG("config path %s",config.realPath.c_str());
148  }
149  parseDataConfig(config);
150  }
151  }
152 
153  if (node["mem_type"]) {
154  auto strType = node["mem_type"].as<std::string>();
155  if (strncasecmp(strType.c_str(), "cpu", strType.size()) == 0) {
156  config.memType = MemType::kCpu;
157  } else if (strncasecmp(strType.c_str(), "gpu", strType.size()) == 0) {
158  config.memType = MemType::kGpuCuda;
159  } else {
160  LOG_WARNING(
161  "unknown mem_type: %s in lidar_file_source config parsing", strType.c_str());
162  }
163  }
164  if (node["gpu_id"]) {
165  config.gpuId = node["gpu_id"].as<int32_t>();
166  }
167  if (node["fixed_points_num"]) {
168  config.fixedPointsNum = node["fixed_points_num"].as<bool>();
169  }
170  if (node["mem_pool_size"]) {
171  config.memPoolSize = node["mem_pool_size"].as<uint32_t>();
172  }
173  if (node["data_type"]) {
174  std::string dataType = node["data_type"].as<std::string>();
175  config.dataType = getDataType(dataType);
176  }
177  if (node["points_num"]) {
178  config.pointNums = node["points_num"].as<uint32_t>();
179  }
180  if (node["element_stride"]) {
181  config.elementStride = node["element_stride"].as<uint32_t>();
182  }
183  if (node["element_size"]) {
184  config.elementSize = node["element_size"].as<uint32_t>();
185  }
186  if (node["output_datamap_key"]) {
187  auto keyNode = node["output_datamap_key"];
188  if (keyNode.IsSequence()) {
189  config.datamapKey = keyNode.as<std::vector<std::string>>();
190  } else {
191  config.datamapKey.resize(1);
192  config.datamapKey[0] = keyNode.as<std::string>();
193  }
194  }
195  if (node["file_loop"]) {
196  config.fileLoop = node["file_loop"].as<bool>();
197  }
198 
199  if (node["source_id"]) {
200  config.sourceId = node["source_id"].as<uint32_t>();
201  }
202 
203  if (config.elementStride == 0) {
204  config.elementStride = config.elementSize;
205  }
206 
208  config.elementSize == 3 || config.elementSize == 4, ErrCode::kConfig,
209  "lidar data config element_size: %d must be [3, 4].", config.elementSize);
210  assert(config.elementStride >= config.elementSize);
211 
212  return ErrCode::kGood;
213 }
214 
215 }}} // namespace ds3d::impl::lidarsource
216 
217 #endif // _DS3D_DATALOADER_LIDARSOURCE_CONFIG_H
ds3d::impl::lidarsource::Config::memPoolSize
uint32_t memPoolSize
Definition: lidar_file_config.h:46
yaml_config.hpp
ds3d::impl::lidarsource::Config::gpuId
int gpuId
Definition: lidar_file_config.h:37
ds3d::ErrCode::kNotFound
@ kNotFound
ds3d::MemType::kCpu
@ kCpu
ds3d::impl::lidarsource::Config::realPath
std::string realPath
Definition: lidar_file_config.h:35
ds3d::DataType::kFp32
@ kFp32
ds3d::impl::lidarsource::Config::dataConfigFilePath
std::string dataConfigFilePath
Definition: lidar_file_config.h:34
LOG_WARNING
#define LOG_WARNING
Definition: logging.h:19
ds3d::DataType
DataType
Definition: idatatype.h:77
ds3d::ErrCode::kGood
@ kGood
ds3d::impl::lidarsource::parseConfig
ErrCode parseConfig(const std::string &content, const std::string &path, Config &config)
Definition: lidar_file_config.h:113
ds3d::impl::lidarsource::Config::fileLoop
bool fileLoop
Definition: lidar_file_config.h:47
ds3d::impl::lidarsource::Config::lastFileTimestamp
uint64_t lastFileTimestamp
Definition: lidar_file_config.h:45
ds3d::config::parseComponentConfig
ErrCode parseComponentConfig(const std::string &yamlComp, const std::string &path, ComponentConfig &config)
Definition: yaml_config.hpp:53
ds3d::impl::lidarsource::Config::pointNums
uint32_t pointNums
Definition: lidar_file_config.h:39
ds3d::ErrCode
ErrCode
Definition: common.h:43
LOG_DEBUG
#define LOG_DEBUG(fmt,...)
Definition: deepstream_action.h:49
ds3d::impl::lidarsource::DataParas::pts
uint64_t pts
Definition: lidar_file_config.h:29
ds3d::impl::lidarsource::DataParas::location
std::string location
Definition: lidar_file_config.h:28
ds3d::impl::lidarsource::Config::memType
MemType memType
Definition: lidar_file_config.h:36
ds3d::impl::lidarsource::Config::elementSize
uint32_t elementSize
Definition: lidar_file_config.h:40
DS3D_ERROR_RETURN
#define DS3D_ERROR_RETURN(code, fmt,...)
Definition: defines.h:72
ds3d::impl::lidarsource::Config::dataParas
std::vector< std::deque< std::map< uint64_t, std::string > > > dataParas
Definition: lidar_file_config.h:44
ds3d::impl::lidarsource::DataParas
Definition: lidar_file_config.h:27
ds3d::MemType::kGpuCuda
@ kGpuCuda
_PATH_MAX
#define _PATH_MAX
Definition: lidar_file_config.h:23
ds3d::ErrCode::kConfig
@ kConfig
ds3d::impl::lidarsource::Config::sourceId
uint32_t sourceId
Definition: lidar_file_config.h:49
ds3d::config::ComponentConfig::configBody
std::string configBody
Definition: includes/ds3d/common/config.h:44
common.h
ds3d::impl::lidarsource::parseDataConfig
ErrCode parseDataConfig(Config &config)
Definition: lidar_file_config.h:64
ds3d::impl::lidarsource::Config::elementStride
uint32_t elementStride
Definition: lidar_file_config.h:41
idatatype.h
ds3d::impl::lidarsource::Config
Definition: lidar_file_config.h:32
ds3d::config::ComponentConfig
Definition: includes/ds3d/common/config.h:34
func_utils.h
DS3D_FAILED_RETURN
#define DS3D_FAILED_RETURN(condition, ret, fmt,...)
Definition: defines.h:64
ds3d::impl::lidarsource::Config::fixedPointsNum
bool fixedPointsNum
Definition: lidar_file_config.h:42
ds3d::impl::lidarsource::getDataType
DataType getDataType(const std::string &dataType)
Definition: lidar_file_config.h:52
ds3d::impl::lidarsource::Config::dataType
DataType dataType
Definition: lidar_file_config.h:43
ds3d
Definition: abi_dataprocess.h:21
ds3d::impl::lidarsource::Config::compConfig
config::ComponentConfig compConfig
Definition: lidar_file_config.h:33
ds3d::MemType
MemType
Definition: idatatype.h:101
ds3d::impl::lidarsource::Config::frameDuration
uint64_t frameDuration
Definition: lidar_file_config.h:48
ds3d::impl::lidarsource::Config::datamapKey
std::vector< std::string > datamapKey
Definition: lidar_file_config.h:38