VRS
A file format for sensor data.
Loading...
Searching...
No Matches
StreamId.h
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <cstdint>
20#include <string>
21
22#include <vrs/os/Platform.h>
23
24namespace vrs {
25
26using std::string;
27
49enum class RecordableTypeId : uint16_t {
50 // for VRS internal use only
51 VRSIndex = 1,
52 VRSDescription = 2,
53
54 // Generic devices using RecordFormat and DataLayout, and following DataLayout conventions.
55 ImageStream = 100,
56 AudioStream = 101,
57 AnnotationStream = 102,
58 ArchiveStream = 103,
59
60 // << Start of Recordable Class IDs >>
61
62 // "Recordable Class" IDs designed to make adding new enum values unnecessary going forward.
63 // Use a combination of "Recordable Class" ID and "flavor" to describe your use case uniquely.
64 // Many of these recordable class IDs are in anticipation of a potential future use case.
65
66 // << Cameras >>
67 // Cameras are arguably the most the important and common class of devices of all.
68 // New devices include many different types at the same time, hence the wide variety offered.
69
88
89 // << Microphones >>
93
94 // << Discrete Sensors >>
96 ImuRecordableClass = 241,
104 EMGRecordableClass = 249,
108 CsaRecordableClass = 253,
115 // << Discrete sensors continue below at 500 >>
116
117 // << Calibration, Setup, Diagnostic, etc >>
125
126 // << External Signals >>
127 SyncRecordableClass = 280,
128 GpsRecordableClass = 281,
131 UsbRecordableClass = 284,
132 TimeRecordableClass = 285,
134 GMSRecordableClass = 287,
135
136 // << User Input >>
143
144 // << Events, commands, instructions, etc >>
151
152 // << Ground Truth >>
159
160 // << Results of all kinds >>
162 PoseRecordableClass = 371,
164 GazeRecordableClass = 373,
165 MeshRecordableClass = 374,
168 MapRecordableClass = 377,
172 TextRecordableClass = 381,
177
178 // << Annotations >>
180
181 // << Discrete Sensors (continued) >>
183
184 // << Test, Samples and other fake devices >>
187
188 // The range 200-999 is reserved for "Recordable Class" IDs exclusively.
191
192 // << End of Recordable Class IDs >>
193
194 // Legacy values needed for open source purposes.
195 SlamCameraData = 1201,
196 SlamImuData = 1202,
197 SlamMagnetometerData = 1203,
198
199#if IS_VRS_FB_INTERNAL()
200#include "StreamId_fb.h"
201#endif
202
203 // Test devices start at 65500.
204 TestDevices = 65500,
205 UnitTest1 = TestDevices,
206 UnitTest2,
208
209 Undefined = 65535
210};
211
219string toString(RecordableTypeId typeId);
220
226
242class StreamId {
243 public:
244 StreamId() : typeId_{RecordableTypeId::Undefined}, instanceId_{0} {}
245 StreamId(const StreamId& rhs) = default;
246 StreamId(RecordableTypeId typeId, uint16_t instanceId)
247 : typeId_{typeId}, instanceId_{instanceId} {}
248
252 return typeId_;
253 }
254
257 uint16_t getInstanceId() const {
258 return instanceId_;
259 }
260
261 StreamId& operator=(const StreamId& rhs) = default;
262 StreamId& operator=(StreamId&& rhs) = default;
263 bool operator==(const StreamId& rhs) const {
264 return typeId_ == rhs.typeId_ && instanceId_ == rhs.instanceId_;
265 }
266
267 bool operator!=(const StreamId& rhs) const {
268 return !operator==(rhs);
269 }
270
272 bool operator<(const StreamId& rhs) const {
273 return typeId_ < rhs.typeId_ || (typeId_ == rhs.typeId_ && instanceId_ < rhs.instanceId_);
274 }
275
279 bool isValid() const {
280 return typeId_ != RecordableTypeId::Undefined;
281 }
282
285 string getTypeName() const {
286 return toString(typeId_);
287 }
290 string getName() const;
293 string getFullName() const;
296 string getNumericName() const;
300 static StreamId fromNumericName(const string& numericName);
305 static StreamId fromNumericNamePlus(const string& numericName);
306
310 static bool isKnownTypeId(RecordableTypeId typeId);
311
313 static StreamId lowest() {
314 return {static_cast<RecordableTypeId>(0), 0};
315 }
316
317 private:
318 RecordableTypeId typeId_;
319 uint16_t instanceId_;
320};
321
322} // namespace vrs
VRS stream identifier class.
Definition StreamId.h:242
static StreamId fromNumericName(const string &numericName)
Definition StreamId.cpp:231
string getTypeName() const
Definition StreamId.h:285
string getNumericName() const
Definition StreamId.cpp:227
bool isValid() const
Definition StreamId.h:279
static StreamId fromNumericNamePlus(const string &numericName)
Definition StreamId.cpp:235
string getFullName() const
Definition StreamId.cpp:222
string getName() const
Definition StreamId.cpp:218
RecordableTypeId getTypeId() const
Definition StreamId.h:251
static StreamId lowest()
StreamId value guaranteed to be smaller than any valid StreamId object.
Definition StreamId.h:313
uint16_t getInstanceId() const
Definition StreamId.h:257
static bool isKnownTypeId(RecordableTypeId typeId)
Definition StreamId.cpp:213
bool operator<(const StreamId &rhs) const
Compare operator, so that we can use StreamId in containers, with a guarantied behavior.
Definition StreamId.h:272
Definition AsyncDiskFileChunk.hpp:49
@ Undefined
when not set explicitly
bool isARecordableClass(RecordableTypeId typeId)
Tell if an id is that of a "Recordable Class".
Definition StreamId.h:222
RecordableTypeId
VRS stream type or class identifier enum.
Definition StreamId.h:49
@ AlignmentRecordableClass
For alignment data streams.
@ AmbientLightRecordableClass
Ambient light data streams.
@ SlamCameraData
Legacy slam data stream.
@ OutsideInCameraRecordableClass
For outside in cameras.
@ InwardCameraRecordableClass
For cameras looking inward.
@ DisplayRecordableClass
For display buffer data streams.
@ InsideOutCameraRecordableClass
For inside out cameras.
@ MocapRecordableClass
For motion capture data streams.
@ MouseRecordableClass
For mouse data streams.
@ LidarRecordableClass
For Lidar data streams.
@ GyroscopeRecordableClass
For gyroscope data streams.
@ SpeechRecordableClass
For speech/ASR data streams.
@ MouthCameraRecordableClass
For cameras recording a mouth.
@ AmbientAudioRecordableClass
For multichannel microphones.
@ DisparityCameraRecordableClass
For disparity cameras.
@ IRCameraRecordableClass
For infrared cameras.
@ VRSIndex
Internal, for index records. See IndexRecord.
@ LastRecordableClassId
Helper values to test if a type is a recordable class.
@ GpsRecordableClass
For GPS data streams.
@ IlluminationRecordableClass
For illumination data streams.
@ SegmentationRecordableClass
For segmentation data streams.
@ ForceRecordableClass
Force data streams.
@ GroundTruthRecordableClass
For ground truth data streams.
@ UsbRecordableClass
For USB data streams.
@ InstructionRecordableClass
For instructions data streams.
@ RgbCameraRecordableClass
For color cameras.
@ DepthCameraRecordableClass
For depth cameras.
@ EventRecordableClass
For event data streams.
@ SampleDevice
For sample code.
@ ControllerRecordableClass
For controller data streams.
@ MeshRecordableClass
For mesh data streams.
@ UltrasonicRecordableClass
For ultrasonic data streams.
@ AttentionRecordableClass
For attention data streams.
@ GroundTruthImuRecordableClass
For ground truth IMU data streams.
@ ImageStream
Generic image stream. Prefer using "Recordable Class" IDs.
@ TemperatureRecordableClass
For temperature data streams.
@ FaceCameraRecordableClass
For cameras recording a face.
@ SensorRecordableClass
For unspecified sensor data. Use flavors to be specific.
@ RadarRecordableClass
Radar data streams.
@ SlamMagnetometerData
Legacy magnetometer data stream.
@ StereoAudioRecordableClass
For stereo microphones.
@ ArchiveStream
Generic archive stream. Prefer using "Recordable Class" IDs.
@ BarometerRecordableClass
For barometer data streams.
@ PipelineEventRecordableClass
For EMG pipeline events streams.
@ StepCountRecordableClass
Step count data streams.
@ ActiveMinutesRecordableClass
Active minutes data streams.
@ EMGGestureRecordableClass
For EMG gesture data streams.
@ CalibrationRecordableClass
For calibration data streams.
@ SensorVarianceBiasRecordableClass
For sensor variance/bias results.
@ MapRecordableClass
For map data streams.
@ SidewardCameraRecordableClass
For cameras looking to the side.
@ MonoAudioRecordableClass
For mono microphones.
@ PointCloudRecordableClass
For point cloud data streams.
@ GazeRecordableClass
For gaze data streams.
@ TextRecordableClass
For result data streams stored as text.
@ GroundTruthDepthRecordableClass
For ground truth depth data streams.
@ AnnotationRecordableClass
For annotation streams.
@ MotionRecordableClass
For motion data streams.
@ PerformanceRecordableClass
For performance data streams.
@ CapacitiveTouchRecordableClass
For capacitive touch data streams.
@ GroundTruthPositionRecordableClass
For ground truth position data streams.
@ DistanceRecordableClass
Distance data streams.
@ SyncRecordableClass
For synchronisation data streams.
@ GMSRecordableClass
For GMS location data stream.
@ TimeRecordableClass
For time data streams.
@ GroundTruthAlignmentRecordableClass
For ground truth alignment data streams.
@ DiagnosticRecordableClass
For diagnostic data streams.
@ UnitTest2
For unit tests.
@ HeartRateRecordableClass
Heart rate data streams.
@ HeadingRecordableClass
Heading data streams.
@ VRSDescription
Internal, for description records. See DescriptionRecord.
@ UpwardCameraRecordableClass
For cameras looking up.
@ BackwardCameraRecordableClass
For cameras looking back.
@ TouchInputRecordableClass
For touch input data streams.
@ GroundTruthOrientationRecordableClass
For ground truth orientation data streams.
@ SampleDeviceRecordableClass
For sample device streams.
@ AccelerometerRecordableClass
For accelerometer data streams.
@ AudioStream
Generic audio stream. Prefer using "Recordable Class" IDs.
@ OutwardCameraRecordableClass
For cameras looking outward.
@ GestureInputRecordableClass
For gesture input data streams.
@ DownwardCameraRecordableClass
For cameras looking down.
@ SetupRecordableClass
For setup data streams.
@ ResultRecordableClass
For result streams.
@ PhotoplethysmogramRecordableClass
For photoplethysmography data streams.
@ MagnetometerRecordableClass
For magnetometer data streams.
@ AnnotationStream
Generic annotation stream. Prefer using "Recordable Class" IDs.
@ CommandRecordableClass
For command data streams.
@ ImuRecordableClass
For IMU data streams.
@ UnitTestRecordableClass
For unit test streams.
@ EyeCameraRecordableClass
For cameras recording eyes.
@ EMGRecordableClass
For electromyography data streams.
@ FirstRecordableClassId
Helper values to test if a type is a recordable class.
@ ControlRecordableClass
For control data streams.
@ InputRecordableClass
For user input data streams.
@ CaloriesRecordableClass
Calories data streams.
@ WorldObserverCameraRecordableClass
For world observing cameras.
@ SlamImuData
Legacy IMU data stream.
@ BluetoothBeaconRecordableClass
For bluetooth beacon data streams.
@ PoseRecordableClass
For pose streams.
@ QuaternionRecordableClass
For quaternion data streams.
@ CsaRecordableClass
CSA data streams.
@ ScriptRecordableClass
For script data streams.
@ AnchorRecordableClass
For anchor data streams (i.e. spatial persistence anchors).
@ Undefined
Value used for default initializations and marking undefined situations.
@ UnitTest1
For unit tests.
@ WifiBeaconRecordableClass
For WIFI beacon data streams.
@ TextInputRecordableClass
For text input data streams.
@ DisplayObserverCameraRecordableClass
For display observing cameras.
@ ForwardCameraRecordableClass
For cameras looking forward.