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) >>
184
185 // << Test, Samples and other fake devices >>
188
189 // The range 200-999 is reserved for "Recordable Class" IDs exclusively.
192
193 // << End of Recordable Class IDs >>
194
195 // Legacy values needed for open source purposes.
196 SlamCameraData = 1201,
197 SlamImuData = 1202,
198 SlamMagnetometerData = 1203,
199
200#if IS_VRS_FB_INTERNAL()
201#include "StreamId_fb.h"
202#endif
203
204 // Test devices start at 65500.
205 TestDevices = 65500,
206 UnitTest1 = TestDevices,
207 UnitTest2,
209
210 Undefined = 65535
211};
212
220string toString(RecordableTypeId typeId);
221
227
243class StreamId {
244 public:
245 StreamId() : typeId_{RecordableTypeId::Undefined}, instanceId_{0} {}
246 StreamId(const StreamId& rhs) = default;
247 StreamId(RecordableTypeId typeId, uint16_t instanceId)
248 : typeId_{typeId}, instanceId_{instanceId} {}
249
253 return typeId_;
254 }
255
258 uint16_t getInstanceId() const {
259 return instanceId_;
260 }
261
262 StreamId& operator=(const StreamId& rhs) = default;
263 StreamId& operator=(StreamId&& rhs) = default;
264 bool operator==(const StreamId& rhs) const {
265 return typeId_ == rhs.typeId_ && instanceId_ == rhs.instanceId_;
266 }
267
268 bool operator!=(const StreamId& rhs) const {
269 return !operator==(rhs);
270 }
271
273 bool operator<(const StreamId& rhs) const {
274 return typeId_ < rhs.typeId_ || (typeId_ == rhs.typeId_ && instanceId_ < rhs.instanceId_);
275 }
276
280 bool isValid() const {
281 return typeId_ != RecordableTypeId::Undefined;
282 }
283
286 string getTypeName() const {
287 return toString(typeId_);
288 }
291 string getName() const;
294 string getFullName() const;
297 string getNumericName() const;
301 static StreamId fromNumericName(const string& numericName);
306 static StreamId fromNumericNamePlus(const string& numericName);
307
311 static bool isKnownTypeId(RecordableTypeId typeId);
312
314 static StreamId lowest() {
315 return {static_cast<RecordableTypeId>(0), 0};
316 }
317
318 private:
319 RecordableTypeId typeId_;
320 uint16_t instanceId_;
321};
322
323} // namespace vrs
VRS stream identifier class.
Definition StreamId.h:243
static StreamId fromNumericName(const string &numericName)
Definition StreamId.cpp:232
string getTypeName() const
Definition StreamId.h:286
string getNumericName() const
Definition StreamId.cpp:228
bool isValid() const
Definition StreamId.h:280
static StreamId fromNumericNamePlus(const string &numericName)
Definition StreamId.cpp:236
string getFullName() const
Definition StreamId.cpp:223
string getName() const
Definition StreamId.cpp:219
RecordableTypeId getTypeId() const
Definition StreamId.h:252
static StreamId lowest()
StreamId value guaranteed to be smaller than any valid StreamId object.
Definition StreamId.h:314
uint16_t getInstanceId() const
Definition StreamId.h:258
static bool isKnownTypeId(RecordableTypeId typeId)
Definition StreamId.cpp:214
bool operator<(const StreamId &rhs) const
Compare operator, so that we can use StreamId in containers, with a guarantied behavior.
Definition StreamId.h:273
Definition Compressor.cpp:113
@ Undefined
when not set explicitly
bool isARecordableClass(RecordableTypeId typeId)
Tell if an id is that of a "Recordable Class".
Definition StreamId.h:223
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.
@ ElevationRecordableClass
Elevation data streams.
@ 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.