Ocean
Loading...
Searching...
No Matches
CameraCalibrationManager.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#ifndef META_OCEAN_IO_CAMERA_CALIBRATION_MANAGER_H
9#define META_OCEAN_IO_CAMERA_CALIBRATION_MANAGER_H
10
11#include "ocean/io/IO.h"
12
14
15#include "ocean/io/JSONParser.h"
16
18
19#include <functional>
20
21namespace Ocean
22{
23
24namespace IO
25{
26
27/**
28 * This class implements a manager for camera calibrations using a modern JSON-based format.
29 * The manager supports multiple camera types through a factory pattern and can be extended with custom camera types.
30 *
31 * The manager supports device-specific calibrations through a device context system.
32 * Device context can be set at three specificity levels: product, version, or serial number.
33 * This allows users to specify simple camera names (e.g., "Back-facing Camera 0") and the manager
34 * automatically matches the appropriate calibration based on the current device context.
35 *
36 * Device Context Levels (from least to most specific):
37 * - Product: Broad product category (e.g., "Samsung S21 5G", "iPhone 13 Pro")
38 * - Version: Specific hardware variant (e.g., "SM-G991U", "A2483")
39 * - Serial: Individual device serial number (e.g., "ABC123456")
40 *
41 * By default, the manager supports "Ocean Pinhole" and "Ocean Fisheye" camera models, an example JSON file is:
42 * <pre>
43 * {
44 * "devices": [
45 * {
46 * "product": "Samsung S21 5G",
47 * "version": "SM-G991U",
48 * "serial": "ABC123456",
49 * "cameras": [
50 * {
51 * "name": "Back-facing Camera 0",
52 * "priority": 10,
53 * "calibrations": [...]
54 * }
55 * ]
56 * },
57 * {
58 * "product": "Samsung S21 5G",
59 * "version": "SM-G991U",
60 * "cameras": [...]
61 * }
62 * ],
63 * "cameras": [
64 * {
65 * "name": "Generic Camera",
66 * "aliases": ["Optional Alias 1", "Optional Alias 2"],
67 * "priority": 10,
68 * "calibrations": [
69 * {
70 * "resolution": {"width": 1920, "height": 1080},
71 * "model": "Ocean Pinhole",
72 * "configuration": "8_PARAMETERS",
73 * "parameters": [fx, fy, mx, my, k1, k2, p1, p2]
74 * "comment": "fully calibrated camera"
75 * },
76 * {
77 * "resolution": {"width": 640, "height": 480},
78 * "model": "Ocean Pinhole",
79 * "fovx": "1.05",
80 * "comment": "manually calibrate camera with approx. 60 degree of horizontal field of view"
81 * }
82 * ]
83 * }
84 * ]
85 * }
86 * </pre>
87 * @ingroup io
88 */
89class OCEAN_IO_EXPORT CameraCalibrationManager : public Singleton<CameraCalibrationManager>
90{
92
93 public:
94
95 /**
96 * Definition of different device context levels.
97 * The device context determines which cameras are visible during lookup operations.
98 */
99 enum DeviceContextLevel : uint32_t
100 {
101 /// No device context is set, only global cameras (without device context) are visible.
102 DCL_NONE = 0u,
103 /// Device context is set to a product name (least specific).
105 /// Device context is set to a hardware version/variant.
107 /// Device context is set to a device serial number (most specific).
108 DCL_SERIAL
109 };
110
111 /**
112 * Definition of different calibration qualities indicating how the calibration was obtained.
113 */
114 enum CalibrationQuality : uint32_t
115 {
116 /// Unknown or invalid calibration quality.
117 CQ_UNKNOWN = 0u,
118 /// The calibration was interpolated from a calibration with a different resolution but the same aspect ratio.
120 /// The calibration exactly matches the requested resolution.
121 CQ_EXACT
122 };
123
124 /**
125 * Definition of a factory function that creates a SharedAnyCamera from a JSON model object.
126 * @param modelObject The JSON object containing the camera model calibration, must be valid
127 * @return The created camera object, nullptr if creation failed
128 */
129 using FactoryFunction = std::function<SharedAnyCamera(const JSONParser::JSONValue& modelObject)>;
130
131 /**
132 * Definition of a serializer function that converts an AnyCamera to a JSON string.
133 * @param camera The camera object to serialize, must be valid
134 * @param precision The number of decimal places to use in the JSON string, with range [0, infinity)
135 * @return The JSON string representation of the camera, empty string if serialization failed
136 */
137 using SerializerFunction = std::function<std::string(const AnyCamera& camera, const unsigned int precision)>;
138
139 protected:
140
141 /**
142 * This class stores multiple camera calibrations with the same priority.
143 * Each Calibrations object can hold camera models for different resolutions, but all share the same priority level.
144 */
146 {
147 public:
148
149 /**
150 * Creates a new Calibrations object with a specific priority.
151 * @param priority The priority of the calibrations, higher values indicate higher priority, with range (-infinity, infinity)
152 * @param deviceProduct Optional device product for this calibration group (e.g., "Samsung S21 5G
153 * @param deviceVersion Optional device version for this calibration group (e.g., "SM-G991U")
154 * @param deviceSerial Optional device serial for this calibration group (e.g., "ABC123456")
155 */
156 inline CalibrationGroup(const int32_t priority, const std::string& deviceProduct = std::string(), const std::string& deviceVersion = std::string(), const std::string& deviceSerial = std::string());
157
158 /**
159 * Adds a camera model to this calibration group.
160 * @param camera The camera to add, must be valid
161 * @return True if the camera was added successfully, false if a camera with the same resolution already exists
162 */
164
165 /**
166 * Returns the best matching camera calibration for a given resolution.
167 * The function first tries to find an exact resolution match.
168 * If no exact match is found, it tries to interpolate a calibration from cameras with the same aspect ratio.
169 * @param width The width of the requested camera image in pixels, with range [1, infinity)
170 * @param height The height of the requested camera image in pixels, with range [1, infinity)
171 * @param calibrationQuality The resulting quality of the calibration
172 * @return The best matching camera model, nullptr if no match was found
173 */
174 SharedAnyCamera camera(const unsigned int width, const unsigned int height, CalibrationQuality& calibrationQuality) const;
175
176 /**
177 * Checks whether this calibration group matches the given device context.
178 * @param deviceContextLevel The device context level to check against
179 * @param deviceContextValue The device context value (product, version, or serial)
180 * @return True if this calibration group matches the device context, false otherwise
181 */
182 bool matchesDeviceContext(const DeviceContextLevel deviceContextLevel, const std::string& deviceContextValue) const;
183
184 /**
185 * Returns the number of camera calibrations in this group.
186 * @return The number of calibrations
187 */
188 inline size_t size() const;
189
190 public:
191
192 /// The priority of all calibrations in this group, higher values indicate higher priority.
193 int32_t priority_ = 0;
194
195 /// All camera models with individual resolutions.
197
198 /// Optional device product for this calibration group (e.g., "Samsung S21 5G", "iPhone 13 Pro"), empty if not set.
199 std::string deviceProduct_;
200
201 /// Optional device version for this calibration group (e.g., "SM-G991U", "A2483"), empty if not set.
202 std::string deviceVersion_;
203
204 /// Optional device serial for this calibration group (e.g., "ABC123456"), empty if not set.
205 std::string deviceSerial_;
206 };
207
208 /**
209 * Definition of a vector holding calibration groups.
210 */
211 using CalibrationGroups = std::vector<CalibrationGroup>;
212
213 /**
214 * Definition of a map mapping camera model names to factory functions.
215 */
216 using FactoryFunctionMap = std::unordered_map<std::string, FactoryFunction>;
217
218 /**
219 * Definition of a map mapping camera model names to serializer functions.
220 */
221 using SerializerFunctionMap = std::unordered_map<std::string, SerializerFunction>;
222
223 /**
224 * Definition of a map mapping camera names to calibration groups.
225 */
226 using CameraMap = std::unordered_map<std::string, CalibrationGroups>;
227
228 /**
229 * Definition of a map mapping camera aliases to their actual camera names.
230 */
231 using AliasMap = std::unordered_map<std::string, std::string>;
232
233 public:
234
235 /**
236 * Returns a camera for a given camera name and resolution.
237 * The function will find the best matching calibration for the given resolution.<br>
238 * First, it searches for exact resolution matches. If none are found, it attempts to interpolate from calibrations with the same aspect ratio.<br>
239 * When multiple calibrations are available, the one with the highest priority and best quality is selected.
240 * The camera lookup is filtered based on the current device context (if set).
241 * @param cameraName The name of the camera (or alias), must be valid
242 * @param width The width of the camera image in pixels, with range [1, infinity)
243 * @param height The height of the camera image in pixels, with range [1, infinity)
244 * @param calibrationQuality Optional resulting calibration quality, nullptr if not of interest
245 * @return The camera model, nullptr if no matching calibration was found
246 * @see setDeviceProduct(), setDeviceVersion(), setDeviceSerial()
247 */
248 SharedAnyCamera camera(const std::string& cameraName, unsigned int width, unsigned int height, CalibrationQuality* calibrationQuality = nullptr) const;
249
250 /**
251 * Sets the device context to a specific product name.
252 * When set, only cameras associated with this product (and no version/serial constraints) will be visible during lookup.
253 * @param product The product name (e.g., "Samsung S21 5G", "iPhone 13 Pro"), must be valid
254 * @return True if the device context was set successfully
255 * @see clearDeviceContext()
256 */
257 bool setDeviceProduct(const std::string& product);
258
259 /**
260 * Sets the device context to a specific hardware version/variant.
261 * When set, only cameras associated with this version will be visible during lookup.
262 * @param version The hardware version/variant identifier (e.g., "SM-G991U", "A2483"), must be valid
263 * @return True if the device context was set successfully
264 * @see clearDeviceContext()
265 */
266 bool setDeviceVersion(const std::string& version);
267
268 /**
269 * Sets the device context to a specific device serial number.
270 * When set, only cameras associated with this exact serial number will be visible during lookup.
271 * @param serial The device serial number (e.g., "ABC123456"), must be valid
272 * @return True if the device context was set successfully
273 * @see clearDeviceContext()
274 */
275 bool setDeviceSerial(const std::string& serial);
276
277 /**
278 * Clears the device context.
279 * After clearing, only global cameras (without device context) will be visible during lookup.
280 */
282
283 /**
284 * Registers calibrations from a JSON file.
285 * @param url The URL or file path of the JSON calibration file, must be valid
286 * @return True if the calibrations were registered successfully, false otherwise
287 */
288 bool registerCalibrations(const std::string& url);
289
290 /**
291 * Registers calibrations from a memory buffer containing JSON data.
292 * @param buffer The memory buffer containing the JSON calibration data, must be valid
293 * @param size The size of the buffer in bytes, with range [1, infinity)
294 * @return True if the calibrations were registered successfully, false otherwise
295 */
296 bool registerCalibrations(const void* buffer, const size_t size);
297
298 /**
299 * Registers calibrations from a parsed JSON value.
300 * @param jsonValue The parsed JSON value, must be a valid object holding the calibration
301 * @return True if the calibrations were registered successfully, false otherwise
302 */
304
305 /**
306 * Registers a single camera calibration with a specific priority.
307 * @param cameraName The name of the camera, must be valid
308 * @param camera The camera model to register, must be valid
309 * @param priority The priority of this calibration, higher values indicate higher priority, with range (-infinity, infinity)
310 * @return True if the camera was registered successfully
311 * @see registerCalibrations()
312 */
313 bool registerCamera(const std::string& cameraName, SharedAnyCamera&& camera, const int32_t priority);
314
315 /**
316 * Registers a new camera factory for a specific camera type.
317 * Factory functions are used to create camera objects from JSON model configurations.
318 * @param modelName The name of the camera model, e.g., "Custom Camera", must be valid
319 * @param factoryFunction The factory function to create cameras of the specified model, nullptr to unregister a factory
320 * @return True if the factory was registered successfully, false if a factory for the same model name already exists
321 */
322 bool registerFactoryFunction(const std::string& modelName, FactoryFunction&& factoryFunction);
323
324 /**
325 * Registers a new camera serializer for a specific camera type.
326 * Serializer functions are used to convert camera objects to JSON strings.
327 * @param modelName The name of the camera model, e.g., "Ocean Pinhole", "Ocean Fisheye", must be valid
328 * @param serializerFunction The serializer function to serialize cameras of the specified model, nullptr to unregister a serializer
329 * @return True if the serializer was registered successfully, false if a serializer for the same model name already exists
330 */
331 bool registerSerializerFunction(const std::string& modelName, SerializerFunction&& serializerFunction);
332
333 /**
334 * Parses one camera calibration from a file or a string/buffer containing the JSON calibration object for only one camera model.
335 * The provided JSON object must have the following structure:
336 * <pre>
337 * {
338 * "resolution": {"width": <WIDTH_IN_PIXELS>, "height": <HEIGHT_IN_PIXELS>},
339 * "model": "<MODEL_NAME>",
340 * "configuration": "<PARAMETER_CONFIGURATION>",
341 * "parameters": [<PARAMETER_1>, <PARAMETER_2>, ...],
342 * }
343 * </pre>
344 * @param jsonCameraCalibrationFile The file path of the JSON calibration file, empty in case a buffer is provided via 'jsonCameraCalibrationBuffer'
345 * @param jsonCameraCalibrationBuffer The JSON string/buffer containing the camera calibration, empty in case a file is provided via 'jsonCameraCalibrationFile'
346 * @return The parsed camera object, nullptr in case of an error
347 */
348 SharedAnyCamera parseCamera(const std::string& jsonCameraCalibrationFile, std::string&& jsonCameraCalibration = std::string()) const;
349
350 /**
351 * Serializes an AnyCamera object to a JSON string that can be parsed back using parseCamera().
352 * The resulting JSON string contains the camera model, resolution, configuration, and parameters.
353 * @param camera The camera object to serialize, must be valid
354 * @param precision The number of decimal places to use in the JSON string, with range [0, infinity)
355 * @return The JSON string representation of the camera, empty string if serialization failed
356 * @see parseCamera()
357 */
358 std::string serializeCamera(const AnyCamera& camera, const unsigned int precision = 6u) const;
359
360 /**
361 * Clears all registered calibrations and aliases.
362 * This function does not remove registered factory functions.
363 */
364 void clear();
365
366 /**
367 * Parses the resolution of a camera from a JSON calibration object.
368 * @param calibrationObject The JSON calibration object, must be valid
369 * @param width The resulting width in pixels
370 * @param height The resulting height in pixels
371 * @return True if the resolution was parsed successfully
372 */
373 static bool parseResolution(const JSONParser::JSONValue& calibrationObject, unsigned int& width, unsigned int& height);
374
375 protected:
376
377 /**
378 * Protected default constructor.
379 * Automatically registers the built-in factory and serializer functions for "Ocean Pinhole" and "Ocean Fisheye" camera models.
380 */
382
383 /**
384 * Registers cameras from a JSON cameras array with optional device context.
385 * @param camerasArray The JSON array containing camera definitions, must be valid
386 * @param deviceProduct Optional device product name, empty for global cameras
387 * @param deviceVersion Optional device version, empty for global cameras
388 * @param deviceSerial Optional device serial number, empty for global cameras
389 * @return True if at least one camera was registered successfully
390 */
391 bool registerCameras(const JSONParser::JSONValue::Array& camerasArray, const std::string& deviceProduct = std::string(), const std::string& deviceVersion = std::string(), const std::string& deviceSerial = std::string());
392
393 /**
394 * Factory function able to create the "Ocean Pinhole" camera model from a JSON configuration.
395 * @param modelObject The JSON object containing the camera model configuration, must be valid
396 * @return The created camera object, nullptr if creation failed
397 */
399
400 /**
401 * Factory function able to create the "Ocean Fisheye" camera model from a JSON configuration.
402 * @param modelObject The JSON object containing the camera model configuration, must be valid
403 * @return The created camera object, nullptr if creation failed
404 */
406
407 /**
408 * Serializer function able to serialize the "Ocean Pinhole" camera model to a JSON string.
409 * @param camera The camera object to serialize, must be valid
410 * @param precision The number of decimal places to use in the JSON string, with range [0, infinity)
411 * @return The JSON string representation of the camera, empty string if serialization failed
412 */
413 static std::string serializeOceanPinhole(const AnyCamera& camera, const unsigned int precision);
414
415 /**
416 * Serializer function able to serialize the "Ocean Fisheye" camera model to a JSON string.
417 * @param camera The camera object to serialize, must be valid
418 * @param precision The number of decimal places to use in the JSON string, with range [0, infinity)
419 * @return The JSON string representation of the camera, empty string if serialization failed
420 */
421 static std::string serializeOceanFisheye(const AnyCamera& camera, const unsigned int precision);
422
423 protected:
424
425 /// The map mapping camera model names to factory functions.
427
428 /// The map mapping camera model names to serializer functions.
430
431 /// The map mapping camera names to calibration groups.
433
434 /// The map mapping camera aliases to their actual camera names.
436
437 /// The current device context level.
438 DeviceContextLevel deviceContextLevel_ = DCL_NONE;
439
440 /// The current device context value (product, version, or serial depending on deviceContextLevel_).
442
443 /// The lock for thread-safe access to all manager data.
444 mutable Lock lock_;
445};
446
447inline CameraCalibrationManager::CalibrationGroup::CalibrationGroup(const int32_t priority, const std::string& deviceProduct, const std::string& deviceVersion, const std::string& deviceSerial) :
448 priority_(priority),
449 deviceProduct_(deviceProduct),
450 deviceVersion_(deviceVersion),
451 deviceSerial_(deviceSerial)
452{
453 // nothing to do here
454}
455
457{
458 return cameras_.size();
459}
460
461}
462
463}
464
465#endif // META_OCEAN_IO_CAMERA_CALIBRATION_MANAGER_H
This class implements the abstract base class for all AnyCamera objects.
Definition AnyCamera.h:131
This class stores multiple camera calibrations with the same priority.
Definition CameraCalibrationManager.h:146
size_t size() const
Returns the number of camera calibrations in this group.
Definition CameraCalibrationManager.h:456
SharedAnyCamera camera(const unsigned int width, const unsigned int height, CalibrationQuality &calibrationQuality) const
Returns the best matching camera calibration for a given resolution.
CalibrationGroup(const int32_t priority, const std::string &deviceProduct=std::string(), const std::string &deviceVersion=std::string(), const std::string &deviceSerial=std::string())
Creates a new Calibrations object with a specific priority.
Definition CameraCalibrationManager.h:447
std::string deviceVersion_
Optional device version for this calibration group (e.g., "SM-G991U", "A2483"), empty if not set.
Definition CameraCalibrationManager.h:202
bool matchesDeviceContext(const DeviceContextLevel deviceContextLevel, const std::string &deviceContextValue) const
Checks whether this calibration group matches the given device context.
SharedAnyCameras cameras_
All camera models with individual resolutions.
Definition CameraCalibrationManager.h:196
std::string deviceSerial_
Optional device serial for this calibration group (e.g., "ABC123456"), empty if not set.
Definition CameraCalibrationManager.h:205
std::string deviceProduct_
Optional device product for this calibration group (e.g., "Samsung S21 5G", "iPhone 13 Pro"),...
Definition CameraCalibrationManager.h:199
bool addCamera(SharedAnyCamera &&camera)
Adds a camera model to this calibration group.
This class implements a manager for camera calibrations using a modern JSON-based format.
Definition CameraCalibrationManager.h:90
bool registerFactoryFunction(const std::string &modelName, FactoryFunction &&factoryFunction)
Registers a new camera factory for a specific camera type.
AliasMap aliasMap_
The map mapping camera aliases to their actual camera names.
Definition CameraCalibrationManager.h:435
std::unordered_map< std::string, SerializerFunction > SerializerFunctionMap
Definition of a map mapping camera model names to serializer functions.
Definition CameraCalibrationManager.h:221
std::unordered_map< std::string, FactoryFunction > FactoryFunctionMap
Definition of a map mapping camera model names to factory functions.
Definition CameraCalibrationManager.h:216
bool registerCalibrations(const std::string &url)
Registers calibrations from a JSON file.
FactoryFunctionMap factoryFunctionMap_
The map mapping camera model names to factory functions.
Definition CameraCalibrationManager.h:426
bool registerCameras(const JSONParser::JSONValue::Array &camerasArray, const std::string &deviceProduct=std::string(), const std::string &deviceVersion=std::string(), const std::string &deviceSerial=std::string())
Registers cameras from a JSON cameras array with optional device context.
SharedAnyCamera parseCamera(const std::string &jsonCameraCalibrationFile, std::string &&jsonCameraCalibration=std::string()) const
Parses one camera calibration from a file or a string/buffer containing the JSON calibration object f...
void clear()
Clears all registered calibrations and aliases.
CalibrationQuality
Definition of different calibration qualities indicating how the calibration was obtained.
Definition CameraCalibrationManager.h:115
@ CQ_INTERPOLATED
The calibration was interpolated from a calibration with a different resolution but the same aspect r...
Definition CameraCalibrationManager.h:119
std::vector< CalibrationGroup > CalibrationGroups
Definition of a vector holding calibration groups.
Definition CameraCalibrationManager.h:211
bool setDeviceProduct(const std::string &product)
Sets the device context to a specific product name.
std::function< SharedAnyCamera(const JSONParser::JSONValue &modelObject)> FactoryFunction
Definition of a factory function that creates a SharedAnyCamera from a JSON model object.
Definition CameraCalibrationManager.h:129
bool registerSerializerFunction(const std::string &modelName, SerializerFunction &&serializerFunction)
Registers a new camera serializer for a specific camera type.
static bool parseResolution(const JSONParser::JSONValue &calibrationObject, unsigned int &width, unsigned int &height)
Parses the resolution of a camera from a JSON calibration object.
static SharedAnyCamera createOceanFisheye(const JSONParser::JSONValue &modelObject)
Factory function able to create the "Ocean Fisheye" camera model from a JSON configuration.
std::unordered_map< std::string, std::string > AliasMap
Definition of a map mapping camera aliases to their actual camera names.
Definition CameraCalibrationManager.h:231
Lock lock_
The lock for thread-safe access to all manager data.
Definition CameraCalibrationManager.h:444
CameraMap cameraMap_
The map mapping camera names to calibration groups.
Definition CameraCalibrationManager.h:432
static std::string serializeOceanFisheye(const AnyCamera &camera, const unsigned int precision)
Serializer function able to serialize the "Ocean Fisheye" camera model to a JSON string.
static std::string serializeOceanPinhole(const AnyCamera &camera, const unsigned int precision)
Serializer function able to serialize the "Ocean Pinhole" camera model to a JSON string.
void clearDeviceContext()
Clears the device context.
std::unordered_map< std::string, CalibrationGroups > CameraMap
Definition of a map mapping camera names to calibration groups.
Definition CameraCalibrationManager.h:226
bool setDeviceVersion(const std::string &version)
Sets the device context to a specific hardware version/variant.
bool setDeviceSerial(const std::string &serial)
Sets the device context to a specific device serial number.
bool registerCalibrations(const void *buffer, const size_t size)
Registers calibrations from a memory buffer containing JSON data.
CameraCalibrationManager()
Protected default constructor.
bool registerCamera(const std::string &cameraName, SharedAnyCamera &&camera, const int32_t priority)
Registers a single camera calibration with a specific priority.
std::function< std::string(const AnyCamera &camera, const unsigned int precision)> SerializerFunction
Definition of a serializer function that converts an AnyCamera to a JSON string.
Definition CameraCalibrationManager.h:137
SharedAnyCamera camera(const std::string &cameraName, unsigned int width, unsigned int height, CalibrationQuality *calibrationQuality=nullptr) const
Returns a camera for a given camera name and resolution.
static SharedAnyCamera createOceanPinhole(const JSONParser::JSONValue &modelObject)
Factory function able to create the "Ocean Pinhole" camera model from a JSON configuration.
std::string deviceContextValue_
The current device context value (product, version, or serial depending on deviceContextLevel_).
Definition CameraCalibrationManager.h:441
bool registerCalibrations(const JSONParser::JSONValue &jsonValue)
Registers calibrations from a parsed JSON value.
DeviceContextLevel
Definition of different device context levels.
Definition CameraCalibrationManager.h:100
@ DCL_VERSION
Device context is set to a hardware version/variant.
Definition CameraCalibrationManager.h:106
@ DCL_PRODUCT
Device context is set to a product name (least specific).
Definition CameraCalibrationManager.h:104
SerializerFunctionMap serializerFunctionMap_
The map mapping camera model names to serializer functions.
Definition CameraCalibrationManager.h:429
std::string serializeCamera(const AnyCamera &camera, const unsigned int precision=6u) const
Serializes an AnyCamera object to a JSON string that can be parsed back using parseCamera().
This class implements a JSON value that can hold different JSON types.
Definition JSONParser.h:35
std::vector< JSONValue > Array
Definition of a JSON array (vector of JSONValue).
Definition JSONParser.h:62
This class implements a recursive lock object.
Definition Lock.h:31
This template class is the base class for all singleton objects.
Definition Singleton.h:71
std::shared_ptr< AnyCamera > SharedAnyCamera
Definition of a shared pointer holding an AnyCamera object with Scalar precision.
Definition AnyCamera.h:61
SharedAnyCamerasT< Scalar > SharedAnyCameras
Definition of a vector holding AnyCamera objects.
Definition AnyCamera.h:91
The namespace covering the entire Ocean framework.
Definition Accessor.h:15