Ocean
Loading...
Searching...
No Matches
SerializerDeviceRecorder.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_DEVICES_SERIALIZATION_SERIALIZER_DEVICE_RECORDER_H
9#define META_OCEAN_DEVICES_SERIALIZATION_SERIALIZER_DEVICE_RECORDER_H
10
12
13#include "ocean/base/Thread.h"
14
24
26
28
29#include <queue>
30
31namespace Ocean
32{
33
34namespace Devices
35{
36
37namespace Serialization
38{
39
40/**
41 * This class implements a serialization recorder for devices and media objects.
42 * The recorder serializes device sensor data and frame medium content using Ocean's DataSerializer.
43 * @ingroup devicesserialization
44 */
45class OCEAN_DEVICES_SERIALIZATION_EXPORT SerializerDeviceRecorder : protected Thread
46{
47 protected:
48
49 /**
50 * Definition of different recorder states.
51 */
53 {
54 /// Idle state, not recording.
55 RS_IDLE = 0u,
56 /// Currently recording.
58 /// Stopping recording.
60 /// Recording has stopped.
61 RS_STOPPED
62 };
63
64 /**
65 * This class combines relevant data for a FrameMedium object.
66 */
68 {
69 public:
70
71 /**
72 * Creates a new object and initializes the object with an existing FrameMedium object.
73 * @param frameMedium The frame medium object, must be valid
74 */
75 explicit inline FrameMediumData(const Media::FrameMediumRef& frameMedium);
76
77 public:
78
79 /// The actual medium object.
81
82 /// The camera model of the medium which has been used to record the last frame(s).
84
85 /// The transformation between the camera and the device which has been used to record the last frame(s).
86 HomogenousMatrixD4 device_T_camera_ = HomogenousMatrixD4(false);
87
88 /// The reference counter for the medium object.
89 unsigned int referenceCounter_ = 0u;
90
91 /// The channel id to which the medium's image data will be streamed.
92 IO::Serialization::DataSerializer::ChannelId channelId_ = IO::Serialization::DataSerializer::invalidChannelId();
93
94 /// The timestamp of the last image that has been recorded.
96 };
97
98 /**
99 * Definition of an unordered map mapping devices to sample event subscription objects.
100 */
101 using SampleEventSubscriptionMap = std::unordered_map<Device*, Measurement::SampleEventSubscription>;
102
103 /**
104 * Definition of an unordered map mapping devices to tracker object event subscription objects.
105 */
106 using TrackerObjectEventSubscriptionMap = std::unordered_map<Device*, Tracker::TrackerObjectEventSubscription>;
107
108 /**
109 * Definition of an unordered map mapping measurements to channel ids.
110 */
111 using MeasurementChannelMap = std::unordered_map<const Measurement*, IO::Serialization::DataSerializer::ChannelId>;
112
113 /**
114 * Definition of an unordered set holding measurement objects.
115 */
116 using MeasurementSet = std::unordered_set<const Measurement*>;
117
118 /**
119 * Definition of a pair combining a channel id with a data sample for extra data.
120 */
121 using ExtraDataSample = std::pair<IO::Serialization::DataSerializer::ChannelId, IO::Serialization::UniqueDataSample>;
122
123 /**
124 * Definition of a queue holding extra data samples.
125 */
126 using ExtraDataSampleQueue = std::queue<ExtraDataSample>;
127
128 /**
129 * This class combines relevant data from a sample so that it can be queued for recording.
130 */
132 {
133 public:
134
135 /**
136 * Creates a new object based on a sample.
137 * @param measurement The sender of the sample, must be valid
138 * @param sample The actual sample, must be valid
139 */
140 inline DeviceSampleData(const Measurement* measurement, const Measurement::SampleRef& sample);
141
142 public:
143
144 /// The sender of the sample.
146
147 /// The sample as received from the sender, may be invalid.
149
150 /// The timestamp when the sample was received, used to determine the playback timestamp.
151 Timestamp sampleCreationTimestamp_ = Timestamp(true);
152 };
153
154 /**
155 * Definition of a vector holding DeviceSampleData objects.
156 */
157 using DeviceSampleDatas = std::vector<DeviceSampleData>;
158
159 /**
160 * Definition of a queue holding DeviceSampleDatas objects.
161 */
162 using DeviceSampleDataQueue = std::queue<DeviceSampleDatas>;
163
164 /**
165 * Definition of an unordered map mapping medium objects to medium data objects.
166 */
167 using FrameMediumMap = std::unordered_map<const Media::FrameMedium*, FrameMediumData>;
168
169 public:
170
171 /**
172 * Creates a new recorder.
173 */
175
176 /**
177 * Destructs the recorder, an active recording will be stopped.
178 */
180
181 /**
182 * Starts recording with a given filename for the new serialization file.
183 * If the recorder is currently already recording, nothing happens.
184 * @param filename The filename for the new serialization file, must be valid
185 * @return True, if succeeded
186 * @see isStarted(), stop().
187 */
188 bool start(const std::string& filename);
189
190 /**
191 * Stops the recording, returns immediately while pending samples are finished to be recorded.
192 * @return True, if succeeded
193 */
194 bool stop();
195
196 /**
197 * Returns whether the recorder is currently recording.
198 * @return True, if so
199 */
200 inline bool isRecording() const;
201
202 /**
203 * Returns whether the recorder has finished recording.
204 * @return True, if so
205 */
206 inline bool hasStopped() const;
207
208 /**
209 * Adds a new frame medium for recording.
210 * A new medium can be added at any time, even if the recorder is currently actively recording.
211 * Each call of addFrameMedium() must be balanced with a call of removeFrameMedium().
212 * @param frameMedium The new frame medium to be added, must be valid
213 * @return True, if succeeded
214 */
215 bool addFrameMedium(const Media::FrameMediumRef& frameMedium);
216
217 /**
218 * Removes a frame medium from the recording.
219 * A medium can be removed at any time from the recorder, even if the recorder is currently actively recording.
220 * @param frameMedium The frame medium to be removed, must be valid
221 * @return True, if succeeded
222 */
223 bool removeFrameMedium(const Media::FrameMediumRef& frameMedium);
224
225 /**
226 * Adds a new extra channel for custom data recording.
227 * @param sampleType The type of samples that will be recorded on this channel, must be valid
228 * @param channelName The name of the channel, must be valid
229 * @param contentType The content type of the data that will be recorded, must be valid
230 * @return The id of the newly created channel, invalidChannelId() if the channel could not be added
231 */
232 [[nodiscard]] IO::Serialization::DataSerializer::ChannelId addExtraChannel(const std::string& sampleType, const std::string& channelName, const std::string& contentType);
233
234 /**
235 * Adds a new extra data sample to be recorded on a specific channel.
236 * @param channelId The id of the channel on which to record the sample, must be valid
237 * @param sample The data sample to be recorded, will be moved
238 * @return True, if succeeded
239 */
241
242 /**
243 * Releases this device recorder explicitly before the recorder is disposed.
244 */
245 void release();
246
247 protected:
248
249 /**
250 * Disabled copy constructor.
251 */
253
254 /**
255 * Event function for new or removed devices.
256 * @param device The device which has been added or removed from the system, must be valid
257 * @param added True, if the device has been added; False, if the device has been removed
258 */
259 void onDeviceChanged(Device* device, const bool added);
260
261 /**
262 * Event function for new sample events from Measurement objects.
263 * @param sender The sender of the event, must be valid
264 * @param sample The new sample with the measurement information
265 */
266 void onMeasurementSample(const Measurement* sender, const Measurement::SampleRef& sample);
267
268 /**
269 * Event function for lost or found tracker object ids.
270 * @param sender The sender of the event, must be valid
271 * @param found True, if the given objects have been found; False, if the given objects have been lost
272 * @param objectIds The ids of all objects, at least one
273 * @param timestamp The timestamp of the event
274 */
275 void onTrackerObject(const Tracker* sender, const bool found, const Measurement::ObjectIdSet& objectIds, const Timestamp& timestamp);
276
277 /**
278 * Records the content of a given sample.
279 * @param sender The sender of the sample, must be valid
280 * @param sample The sample holding the information to be recorded
281 * @param sampleCreationTimestamp The timestamp when the sample was received
282 */
283 void recordSample(const Measurement* sender, const Measurement::SampleRef& sample, const Timestamp& sampleCreationTimestamp);
284
285 /**
286 * Records the content of a given sensor sample.
287 * @param sender The sender of the sample, must be valid
288 * @param sample The sample holding the information to be recorded
289 * @param sampleCreationTimestamp The timestamp when the sample was received
290 */
291 void recordSensorSample(const Measurement* sender, const Measurement::SampleRef& sample, const Timestamp& sampleCreationTimestamp);
292
293 /**
294 * Records the content of a given tracker sample.
295 * @param sender The sender of the sample, must be valid
296 * @param sample The sample holding the information to be recorded
297 * @param sampleCreationTimestamp The timestamp when the sample was received
298 */
299 void recordTrackerSample(const Measurement* sender, const Measurement::SampleRef& sample, const Timestamp& sampleCreationTimestamp);
300
301 /**
302 * Records the content of a given 6DOF tracker sample.
303 * @param sender The sender of the sample, must be valid
304 * @param sample The sample holding the information to be recorded
305 * @param sampleCreationTimestamp The timestamp when the sample was received
306 */
307 void recordTracker6DOFSample(const Measurement* sender, const Tracker6DOF::Tracker6DOFSampleRef& sample, const Timestamp& sampleCreationTimestamp);
308
309 /**
310 * Records the content of a given GPS tracker sample.
311 * @param sender The sender of the sample, must be valid
312 * @param sample The sample holding the information to be recorded
313 * @param sampleCreationTimestamp The timestamp when the sample was received
314 */
315 void recordGPSTrackerSample(const Measurement* sender, const GPSTracker::GPSTrackerSampleRef& sample, const Timestamp& sampleCreationTimestamp);
316
317 /**
318 * Records the content of a given 3DOF acceleration sensor sample.
319 * @param sender The sender of the sample, must be valid
320 * @param sample The acceleration sensor sample, must be valid
321 * @param sampleCreationTimestamp The timestamp when the sample was received
322 */
323 void recordAccelerationSensor3DOFSample(const Measurement* sender, const AccelerationSensor3DOF::Acceleration3DOFSampleRef& sample, const Timestamp& sampleCreationTimestamp);
324
325 /**
326 * Records the content of a given 3DOF gyro sensor sample.
327 * @param sender The sender of the sample, must be valid
328 * @param sample The gyro sensor sample, must be valid
329 * @param sampleCreationTimestamp The timestamp when the sample was received
330 */
331 void recordGyroSensor3DOFSample(const Measurement* sender, const GyroSensor3DOF::Gyro3DOFSampleRef& sample, const Timestamp& sampleCreationTimestamp);
332
333 /**
334 * Records the content of a given 3DOF orientation tracker sample.
335 * @param sender The sender of the sample, must be valid
336 * @param sample The orientation tracker sample, must be valid
337 * @param sampleCreationTimestamp The timestamp when the sample was received
338 */
340
341 /**
342 * Records the content of a given 3DOF gravity tracker sample.
343 * @param sender The sender of the sample, must be valid
344 * @param sample The gravity tracker sample, must be valid
345 * @param sampleCreationTimestamp The timestamp when the sample was received
346 */
347 void recordGravityTracker3DOFSample(const Measurement* sender, const GravityTracker3DOF::GravityTracker3DOFSampleRef& sample, const Timestamp& sampleCreationTimestamp);
348
349 /**
350 * Records the content of a given 3DOF position tracker sample.
351 * @param sender The sender of the sample, must be valid
352 * @param sample The position tracker sample, must be valid
353 * @param sampleCreationTimestamp The timestamp when the sample was received
354 */
355 void recordPositionTracker3DOFSample(const Measurement* sender, const PositionTracker3DOF::PositionTracker3DOFSampleRef& sample, const Timestamp& sampleCreationTimestamp);
356
357 /**
358 * Records a new frame from a frame medium.
359 * @param frameMediumData The data describing the frame medium
360 * @param frame The actual frame to record, must be valid
361 * @param camera The camera profile of the current frame, if known
362 * @return True, if succeeded
363 */
364 bool recordFrame(FrameMediumData& frameMediumData, const Frame& frame, const SharedAnyCamera& camera);
365
366 /**
367 * Moves all not yet queued samples to the queue.
368 */
370
371 /**
372 * The recorder's thread function in which the actual recording is happening.
373 * @see Thread::threadRun().
374 */
375 void threadRun() override;
376
377 /**
378 * Disabled copy operator.
379 * @return This object
380 */
382
383 protected:
384
385 /// The state of the recorder.
386 std::atomic<RecorderState> recorderState_ = RS_IDLE;
387
388 /// True, if the callback event function for changed devices has been registered.
389 bool callbackEventDeviceChangedRegistered_ = false;
390
391 /// The map of event subscriptions for sample events.
393
394 /// The map of event subscriptions for object events.
396
397 /// The map mapping measurements objects to channel ids.
399
400 /// The map mapping media pointers to media data objects.
402
403 /// The lock for the 'frameMediumMap_' object.
405
406 /// The samples which are not yet pushed into the recording queue.
408
409 /// The lock for the 'unqueuedDeviceSampleDatas_' object.
411
412 /// The queue with samples that are waiting to be recorded.
414
415 /// The lock for the 'deviceSampleDataQueue_' object.
417
418 /// The queue with extra data samples that are waiting to be recorded.
420
421 /// The lock for the 'extraDataSampleQueue_' object.
423
424 /// The lock for the entire recorder.
426
427 /// The set of measurement objects which are not valid anymore.
429
430 /// The actual serialization output serializer.
431 std::unique_ptr<IO::Serialization::FileOutputDataSerializer> outputSerializer_;
432};
433
435 frameMedium_(frameMedium)
436{
437 // nothing to do here
438}
439
441 measurement_(measurement),
442 sample_(sample)
443{
444 // nothing to do here
445}
446
448{
449 const RecorderState recorderState = recorderState_;
450
451 return recorderState == RS_RECORDING || recorderState == RS_STOPPING;
452}
453
455{
456 return recorderState_ == RS_STOPPED;
457}
458
459}
460
461}
462
463}
464
465#endif // META_OCEAN_DEVICES_SERIALIZATION_SERIALIZER_DEVICE_RECORDER_H
This class is the base class for all devices of any type.
Definition devices/Device.h:28
This class implements the base class for all devices providing measurement samples.
Definition Measurement.h:41
std::unordered_set< ObjectId > ObjectIdSet
Definition of an unordered set holding object ids.
Definition Measurement.h:57
This class combines relevant data from a sample so that it can be queued for recording.
Definition SerializerDeviceRecorder.h:132
Measurement::SampleRef sample_
The sample as received from the sender, may be invalid.
Definition SerializerDeviceRecorder.h:148
DeviceSampleData(const Measurement *measurement, const Measurement::SampleRef &sample)
Creates a new object based on a sample.
Definition SerializerDeviceRecorder.h:440
const Measurement * measurement_
The sender of the sample.
Definition SerializerDeviceRecorder.h:145
This class combines relevant data for a FrameMedium object.
Definition SerializerDeviceRecorder.h:68
Media::FrameMediumRef frameMedium_
The actual medium object.
Definition SerializerDeviceRecorder.h:80
FrameMediumData(const Media::FrameMediumRef &frameMedium)
Creates a new object and initializes the object with an existing FrameMedium object.
Definition SerializerDeviceRecorder.h:434
Timestamp lastTimestamp_
The timestamp of the last image that has been recorded.
Definition SerializerDeviceRecorder.h:95
SharedAnyCamera camera_
The camera model of the medium which has been used to record the last frame(s).
Definition SerializerDeviceRecorder.h:83
This class implements a serialization recorder for devices and media objects.
Definition SerializerDeviceRecorder.h:46
void recordTracker6DOFSample(const Measurement *sender, const Tracker6DOF::Tracker6DOFSampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given 6DOF tracker sample.
FrameMediumMap frameMediumMap_
The map mapping media pointers to media data objects.
Definition SerializerDeviceRecorder.h:401
void onMeasurementSample(const Measurement *sender, const Measurement::SampleRef &sample)
Event function for new sample events from Measurement objects.
void recordAccelerationSensor3DOFSample(const Measurement *sender, const AccelerationSensor3DOF::Acceleration3DOFSampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given 3DOF acceleration sensor sample.
std::unordered_set< const Measurement * > MeasurementSet
Definition of an unordered set holding measurement objects.
Definition SerializerDeviceRecorder.h:116
void onDeviceChanged(Device *device, const bool added)
Event function for new or removed devices.
RecorderState
Definition of different recorder states.
Definition SerializerDeviceRecorder.h:53
@ RS_STOPPING
Stopping recording.
Definition SerializerDeviceRecorder.h:59
@ RS_RECORDING
Currently recording.
Definition SerializerDeviceRecorder.h:57
@ RS_STOPPED
Recording has stopped.
Definition SerializerDeviceRecorder.h:61
void recordSample(const Measurement *sender, const Measurement::SampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given sample.
bool stop()
Stops the recording, returns immediately while pending samples are finished to be recorded.
void recordGravityTracker3DOFSample(const Measurement *sender, const GravityTracker3DOF::GravityTracker3DOFSampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given 3DOF gravity tracker sample.
void queueUnqueuedSamples()
Moves all not yet queued samples to the queue.
void recordOrientationTracker3DOFSample(const Measurement *sender, const OrientationTracker3DOF::OrientationTracker3DOFSampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given 3DOF orientation tracker sample.
SerializerDeviceRecorder(const SerializerDeviceRecorder &)=delete
Disabled copy constructor.
void recordPositionTracker3DOFSample(const Measurement *sender, const PositionTracker3DOF::PositionTracker3DOFSampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given 3DOF position tracker sample.
std::unordered_map< const Measurement *, IO::Serialization::DataSerializer::ChannelId > MeasurementChannelMap
Definition of an unordered map mapping measurements to channel ids.
Definition SerializerDeviceRecorder.h:111
MeasurementChannelMap measurementChannelMap_
The map mapping measurements objects to channel ids.
Definition SerializerDeviceRecorder.h:398
bool addExtraDataSample(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Adds a new extra data sample to be recorded on a specific channel.
SampleEventSubscriptionMap sampleEventSubscriptionMap_
The map of event subscriptions for sample events.
Definition SerializerDeviceRecorder.h:392
void recordGyroSensor3DOFSample(const Measurement *sender, const GyroSensor3DOF::Gyro3DOFSampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given 3DOF gyro sensor sample.
void release()
Releases this device recorder explicitly before the recorder is disposed.
IO::Serialization::DataSerializer::ChannelId addExtraChannel(const std::string &sampleType, const std::string &channelName, const std::string &contentType)
Adds a new extra channel for custom data recording.
std::atomic< RecorderState > recorderState_
The state of the recorder.
Definition SerializerDeviceRecorder.h:386
void recordTrackerSample(const Measurement *sender, const Measurement::SampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given tracker sample.
std::unordered_map< Device *, Measurement::SampleEventSubscription > SampleEventSubscriptionMap
Definition of an unordered map mapping devices to sample event subscription objects.
Definition SerializerDeviceRecorder.h:101
DeviceSampleDatas unqueuedDeviceSampleDatas_
The samples which are not yet pushed into the recording queue.
Definition SerializerDeviceRecorder.h:407
bool start(const std::string &filename)
Starts recording with a given filename for the new serialization file.
bool isRecording() const
Returns whether the recorder is currently recording.
Definition SerializerDeviceRecorder.h:447
Lock frameMediumMapLock_
The lock for the 'frameMediumMap_' object.
Definition SerializerDeviceRecorder.h:404
std::pair< IO::Serialization::DataSerializer::ChannelId, IO::Serialization::UniqueDataSample > ExtraDataSample
Definition of a pair combining a channel id with a data sample for extra data.
Definition SerializerDeviceRecorder.h:121
TrackerObjectEventSubscriptionMap trackerObjectEventSubscriptionMap_
The map of event subscriptions for object events.
Definition SerializerDeviceRecorder.h:395
ExtraDataSampleQueue extraDataSampleQueue_
The queue with extra data samples that are waiting to be recorded.
Definition SerializerDeviceRecorder.h:419
Lock unqueuedDeviceSampleDatasLock_
The lock for the 'unqueuedDeviceSampleDatas_' object.
Definition SerializerDeviceRecorder.h:410
~SerializerDeviceRecorder() override
Destructs the recorder, an active recording will be stopped.
void recordGPSTrackerSample(const Measurement *sender, const GPSTracker::GPSTrackerSampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given GPS tracker sample.
std::unordered_map< const Media::FrameMedium *, FrameMediumData > FrameMediumMap
Definition of an unordered map mapping medium objects to medium data objects.
Definition SerializerDeviceRecorder.h:167
Lock recorderLock_
The lock for the entire recorder.
Definition SerializerDeviceRecorder.h:425
bool hasStopped() const
Returns whether the recorder has finished recording.
Definition SerializerDeviceRecorder.h:454
DeviceSampleDataQueue deviceSampleDataQueue_
The queue with samples that are waiting to be recorded.
Definition SerializerDeviceRecorder.h:413
SerializerDeviceRecorder & operator=(const SerializerDeviceRecorder &)=delete
Disabled copy operator.
bool addFrameMedium(const Media::FrameMediumRef &frameMedium)
Adds a new frame medium for recording.
void onTrackerObject(const Tracker *sender, const bool found, const Measurement::ObjectIdSet &objectIds, const Timestamp &timestamp)
Event function for lost or found tracker object ids.
Lock deviceSampleDataQueueLock_
The lock for the 'deviceSampleDataQueue_' object.
Definition SerializerDeviceRecorder.h:416
std::vector< DeviceSampleData > DeviceSampleDatas
Definition of a vector holding DeviceSampleData objects.
Definition SerializerDeviceRecorder.h:157
void threadRun() override
The recorder's thread function in which the actual recording is happening.
std::unordered_map< Device *, Tracker::TrackerObjectEventSubscription > TrackerObjectEventSubscriptionMap
Definition of an unordered map mapping devices to tracker object event subscription objects.
Definition SerializerDeviceRecorder.h:106
void recordSensorSample(const Measurement *sender, const Measurement::SampleRef &sample, const Timestamp &sampleCreationTimestamp)
Records the content of a given sensor sample.
std::queue< DeviceSampleDatas > DeviceSampleDataQueue
Definition of a queue holding DeviceSampleDatas objects.
Definition SerializerDeviceRecorder.h:162
bool removeFrameMedium(const Media::FrameMediumRef &frameMedium)
Removes a frame medium from the recording.
std::unique_ptr< IO::Serialization::FileOutputDataSerializer > outputSerializer_
The actual serialization output serializer.
Definition SerializerDeviceRecorder.h:431
bool recordFrame(FrameMediumData &frameMediumData, const Frame &frame, const SharedAnyCamera &camera)
Records a new frame from a frame medium.
Lock extraDataSampleQueueLock_
The lock for the 'extraDataSampleQueue_' object.
Definition SerializerDeviceRecorder.h:422
MeasurementSet invalidMeasurements_
The set of measurement objects which are not valid anymore.
Definition SerializerDeviceRecorder.h:428
std::queue< ExtraDataSample > ExtraDataSampleQueue
Definition of a queue holding extra data samples.
Definition SerializerDeviceRecorder.h:126
This class implements the base class for all tracker devices.
Definition devices/Tracker.h:39
This class implements Ocean's image class.
Definition Frame.h:1879
uint32_t ChannelId
Definition of a channel id.
Definition DataSerializer.h:40
This class implements a recursive lock object.
Definition Lock.h:31
This template class implements a smart object reference which is a specialization of an ObjectRef obj...
Definition SmartObjectRef.h:90
This class implements a thread.
Definition Thread.h:115
This class implements a timestamp.
Definition Timestamp.h:63
std::unique_ptr< DataSample > UniqueDataSample
Definition of a unique pointer holding a DataSample.
Definition DataSample.h:39
std::shared_ptr< AnyCamera > SharedAnyCamera
Definition of a shared pointer holding an AnyCamera object with Scalar precision.
Definition AnyCamera.h:61
SmartMediumRef< FrameMedium > FrameMediumRef
Definition of a smart medium reference holding a frame medium object.
Definition FrameMedium.h:39
The namespace covering the entire Ocean framework.
Definition Accessor.h:15