11 #include <json/json.h>
17 #include <unordered_map>
25 {K4A_IMAGE_FORMAT_COLOR_MJPG,
"K4A_IMAGE_FORMAT_COLOR_MJPG"},
26 {K4A_IMAGE_FORMAT_COLOR_NV12,
"K4A_IMAGE_FORMAT_COLOR_NV12"},
27 {K4A_IMAGE_FORMAT_COLOR_YUY2,
"K4A_IMAGE_FORMAT_COLOR_YUY2"},
28 {K4A_IMAGE_FORMAT_COLOR_BGRA32,
"K4A_IMAGE_FORMAT_COLOR_BGRA32"},
29 {K4A_IMAGE_FORMAT_DEPTH16,
"K4A_IMAGE_FORMAT_DEPTH16"},
30 {K4A_IMAGE_FORMAT_IR16,
"K4A_IMAGE_FORMAT_IR16"},
31 {K4A_IMAGE_FORMAT_CUSTOM,
"K4A_IMAGE_FORMAT_CUSTOM"},
34 static std::map<k4a_color_resolution_t, std::string>
36 {K4A_COLOR_RESOLUTION_OFF,
"K4A_COLOR_RESOLUTION_OFF"},
37 {K4A_COLOR_RESOLUTION_720P,
"K4A_COLOR_RESOLUTION_720P"},
38 {K4A_COLOR_RESOLUTION_1080P,
"K4A_COLOR_RESOLUTION_1080P"},
39 {K4A_COLOR_RESOLUTION_1440P,
"K4A_COLOR_RESOLUTION_1440P"},
40 {K4A_COLOR_RESOLUTION_1536P,
"K4A_COLOR_RESOLUTION_1536P"},
41 {K4A_COLOR_RESOLUTION_2160P,
"K4A_COLOR_RESOLUTION_2160P"},
42 {K4A_COLOR_RESOLUTION_3072P,
"K4A_COLOR_RESOLUTION_3072P"},
46 {K4A_DEPTH_MODE_OFF,
"K4A_DEPTH_MODE_OFF"},
47 {K4A_DEPTH_MODE_NFOV_2X2BINNED,
"K4A_DEPTH_MODE_NFOV_2X2BINNED"},
48 {K4A_DEPTH_MODE_NFOV_UNBINNED,
"K4A_DEPTH_MODE_NFOV_UNBINNED"},
49 {K4A_DEPTH_MODE_WFOV_2X2BINNED,
"K4A_DEPTH_MODE_WFOV_2X2BINNED"},
50 {K4A_DEPTH_MODE_WFOV_UNBINNED,
"K4A_DEPTH_MODE_WFOV_UNBINNED"},
51 {K4A_DEPTH_MODE_PASSIVE_IR,
"K4A_DEPTH_MODE_PASSIVE_IR"},
55 {K4A_FRAMES_PER_SECOND_5,
"K4A_FRAMES_PER_SECOND_5"},
56 {K4A_FRAMES_PER_SECOND_15,
"K4A_FRAMES_PER_SECOND_15"},
57 {K4A_FRAMES_PER_SECOND_30,
"K4A_FRAMES_PER_SECOND_30"},
60 static std::map<k4a_wired_sync_mode_t, std::string>
62 {K4A_WIRED_SYNC_MODE_STANDALONE,
63 "K4A_WIRED_SYNC_MODE_STANDALONE"},
64 {K4A_WIRED_SYNC_MODE_MASTER,
"K4A_WIRED_SYNC_MODE_MASTER"},
65 {K4A_WIRED_SYNC_MODE_SUBORDINATE,
66 "K4A_WIRED_SYNC_MODE_SUBORDINATE"},
70 {
"K4A_IMAGE_FORMAT_COLOR_MJPG", K4A_IMAGE_FORMAT_COLOR_MJPG},
71 {
"K4A_IMAGE_FORMAT_COLOR_NV12", K4A_IMAGE_FORMAT_COLOR_NV12},
72 {
"K4A_IMAGE_FORMAT_COLOR_YUY2", K4A_IMAGE_FORMAT_COLOR_YUY2},
73 {
"K4A_IMAGE_FORMAT_COLOR_BGRA32", K4A_IMAGE_FORMAT_COLOR_BGRA32},
74 {
"K4A_IMAGE_FORMAT_DEPTH16", K4A_IMAGE_FORMAT_DEPTH16},
75 {
"K4A_IMAGE_FORMAT_IR16", K4A_IMAGE_FORMAT_IR16},
76 {
"K4A_IMAGE_FORMAT_CUSTOM", K4A_IMAGE_FORMAT_CUSTOM},
79 static std::map<std::string, k4a_color_resolution_t>
81 {
"K4A_COLOR_RESOLUTION_OFF", K4A_COLOR_RESOLUTION_OFF},
82 {
"K4A_COLOR_RESOLUTION_720P", K4A_COLOR_RESOLUTION_720P},
83 {
"K4A_COLOR_RESOLUTION_1080P", K4A_COLOR_RESOLUTION_1080P},
84 {
"K4A_COLOR_RESOLUTION_1440P", K4A_COLOR_RESOLUTION_1440P},
85 {
"K4A_COLOR_RESOLUTION_1536P", K4A_COLOR_RESOLUTION_1536P},
86 {
"K4A_COLOR_RESOLUTION_2160P", K4A_COLOR_RESOLUTION_2160P},
87 {
"K4A_COLOR_RESOLUTION_3072P", K4A_COLOR_RESOLUTION_3072P},
91 {
"K4A_DEPTH_MODE_OFF", K4A_DEPTH_MODE_OFF},
92 {
"K4A_DEPTH_MODE_NFOV_2X2BINNED", K4A_DEPTH_MODE_NFOV_2X2BINNED},
93 {
"K4A_DEPTH_MODE_NFOV_UNBINNED", K4A_DEPTH_MODE_NFOV_UNBINNED},
94 {
"K4A_DEPTH_MODE_WFOV_2X2BINNED", K4A_DEPTH_MODE_WFOV_2X2BINNED},
95 {
"K4A_DEPTH_MODE_WFOV_UNBINNED", K4A_DEPTH_MODE_WFOV_UNBINNED},
96 {
"K4A_DEPTH_MODE_PASSIVE_IR", K4A_DEPTH_MODE_PASSIVE_IR},
100 {
"K4A_FRAMES_PER_SECOND_5", K4A_FRAMES_PER_SECOND_5},
101 {
"K4A_FRAMES_PER_SECOND_15", K4A_FRAMES_PER_SECOND_15},
102 {
"K4A_FRAMES_PER_SECOND_30", K4A_FRAMES_PER_SECOND_30},
105 static std::map<std::string, k4a_wired_sync_mode_t>
107 {
"K4A_WIRED_SYNC_MODE_STANDALONE",
108 K4A_WIRED_SYNC_MODE_STANDALONE},
109 {
"K4A_WIRED_SYNC_MODE_MASTER", K4A_WIRED_SYNC_MODE_MASTER},
110 {
"K4A_WIRED_SYNC_MODE_SUBORDINATE",
111 K4A_WIRED_SYNC_MODE_SUBORDINATE},
115 {
"color_format",
"K4A_IMAGE_FORMAT_COLOR_MJPG"},
116 {
"color_resolution",
"K4A_COLOR_RESOLUTION_720P"},
117 {
"depth_mode",
"K4A_DEPTH_MODE_WFOV_2X2BINNED"},
118 {
"camera_fps",
"K4A_FRAMES_PER_SECOND_30"},
119 {
"synchronized_images_only",
"false"},
120 {
"depth_delay_off_color_usec",
"0"},
121 {
"wired_sync_mode",
"K4A_WIRED_SYNC_MODE_STANDALONE"},
122 {
"subordinate_delay_off_master_usec",
"0"},
123 {
"disable_streaming_indicator",
"false"},
131 const std::unordered_map<std::string, std::string> &config,
136 for (
const auto &it : config) {
143 if (config.count(
"color_format") != 0 &&
151 if (config.count(
"color_resolution") != 0 &&
160 if (config.count(
"depth_mode") != 0 &&
168 if (config.count(
"camera_fps") != 0 &&
175 if (config.count(
"camera_fps") != 0 &&
176 config.count(
"color_resolution") != 0 &&
177 config.at(
"camera_fps") ==
"K4A_FRAMES_PER_SECOND_30" &&
178 config.at(
"color_resolution") ==
"K4A_COLOR_RESOLUTION_3072P") {
182 "K4A_COLOR_RESOLUTION_3072P does not support 30 FPS");
187 if (config.count(
"synchronized_images_only") != 0 &&
188 config.at(
"synchronized_images_only") !=
"true" &&
189 config.at(
"synchronized_images_only") !=
"false") {
193 "IsValidConfig: synchronized_images_only invalid");
197 if (config.count(
"wired_sync_mode") != 0 &&
206 if (config.count(
"disable_streaming_indicator") != 0 &&
207 config.at(
"disable_streaming_indicator") !=
"true" &&
208 config.at(
"disable_streaming_indicator") !=
"false") {
212 "IsValidConfig: disable_streaming_indicator invalid");
220 const std::unordered_map<std::string, std::string> &config)
226 for (
const auto &it : config) {
233 value[
"color_format"] =
config_.at(
"color_format");
234 value[
"color_resolution"] =
config_.at(
"color_resolution");
235 value[
"depth_mode"] =
config_.at(
"depth_mode");
236 value[
"camera_fps"] =
config_.at(
"camera_fps");
237 value[
"synchronized_images_only"] =
config_.at(
"synchronized_images_only");
238 value[
"depth_delay_off_color_usec"] =
config_.at(
"depth_delay_off_color_usec");
239 value[
"wired_sync_mode"] =
config_.at(
"wired_sync_mode");
240 value[
"subordinate_delay_off_master_usec"] =
config_.at(
"subordinate_delay_off_master_usec");
241 value[
"disable_streaming_indicator"] =
config_.at(
"disable_streaming_indicator");
248 config_[
"color_format"] = value[
"color_format"].asString();
249 config_[
"color_resolution"] = value[
"color_resolution"].asString();
250 config_[
"depth_mode"] = value[
"depth_mode"].asString();
251 config_[
"camera_fps"] = value[
"camera_fps"].asString();
252 config_[
"synchronized_images_only"] = value[
"synchronized_images_only"].asString();
253 config_[
"depth_delay_off_color_usec"] = value[
"depth_delay_off_color_usec"].asString();
254 config_[
"wired_sync_mode"] = value[
"wired_sync_mode"].asString();
255 config_[
"subordinate_delay_off_master_usec"] = value[
"subordinate_delay_off_master_usec"].asString();
256 config_[
"disable_streaming_indicator"] = value[
"disable_streaming_indicator"].asString();
263 const k4a_device_configuration_t &k4a_config) {
269 config_[
"synchronized_images_only"] = k4a_config.synchronized_images_only ?
"true" :
"false";
272 config_[
"subordinate_delay_off_master_usec"] =
std::to_string(k4a_config.subordinate_delay_off_master_usec);
273 config_[
"disable_streaming_indicator"] = k4a_config.disable_streaming_indicator ?
"true" :
"false";
277 "Internal error, invalid configs. Maybe SDK version is "
284 k4a_device_configuration_t k4a_config;
290 k4a_config.synchronized_images_only =
config_.at(
"synchronized_images_only") ==
"true";
291 k4a_config.depth_delay_off_color_usec =
static_cast<int32_t
>(std::stoi(
config_.at(
"depth_delay_off_color_usec")));
293 k4a_config.subordinate_delay_off_master_usec =
static_cast<uint32_t
>(std::stoi(
config_.at(
"subordinate_delay_off_master_usec")));
294 k4a_config.disable_streaming_indicator =
config_.at(
"disable_streaming_indicator") ==
"true";
_k4a_device_configuration_t ConvertToNativeConfig() const
bool ConvertToJsonValue(Json::Value &value) const override
std::unordered_map< std::string, std::string > config_
void ConvertFromNativeConfig(const _k4a_device_configuration_t &k4a_config)
bool ConvertFromJsonValue(const Json::Value &value) override
AzureKinectSensorConfig()
Default constructor, default configs will be used.
static bool IsValidConfig(const std::unordered_map< std::string, std::string > &config, bool verbose=true)
static std::map< k4a_image_format_t, std::string > k4a_image_format_t_to_string
static std::map< std::string, k4a_fps_t > string_to_k4a_fps_t
static std::unordered_map< std::string, std::string > standard_config
static std::map< k4a_depth_mode_t, std::string > k4a_depth_mode_t_to_string
static std::map< std::string, k4a_wired_sync_mode_t > string_to_k4a_wired_sync_mode_t
static std::map< std::string, k4a_depth_mode_t > string_to_k4a_depth_mode_t
static std::map< k4a_color_resolution_t, std::string > k4a_color_resolution_t_to_string
static std::map< std::string, k4a_color_resolution_t > string_to_k4a_color_resolution_t
static std::map< k4a_wired_sync_mode_t, std::string > k4a_wired_sync_mode_t_to_string
static std::map< k4a_fps_t, std::string > k4a_fps_t_to_string
static std::map< std::string, k4a_image_format_t > string_to_k4a_image_format_t({ {"K4A_IMAGE_FORMAT_COLOR_MJPG", K4A_IMAGE_FORMAT_COLOR_MJPG}, {"K4A_IMAGE_FORMAT_COLOR_NV12", K4A_IMAGE_FORMAT_COLOR_NV12}, {"K4A_IMAGE_FORMAT_COLOR_YUY2", K4A_IMAGE_FORMAT_COLOR_YUY2}, {"K4A_IMAGE_FORMAT_COLOR_BGRA32", K4A_IMAGE_FORMAT_COLOR_BGRA32}, {"K4A_IMAGE_FORMAT_DEPTH16", K4A_IMAGE_FORMAT_DEPTH16}, {"K4A_IMAGE_FORMAT_IR16", K4A_IMAGE_FORMAT_IR16}, {"K4A_IMAGE_FORMAT_CUSTOM", K4A_IMAGE_FORMAT_CUSTOM}, })
Generic file read and write utility for python interface.
std::string to_string(const T &n)