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) >>
185
186 // << Test, Samples and other fake devices >>
189
190 // The range 200-999 is reserved for "Recordable Class" IDs exclusively.
193
194 // << End of Recordable Class IDs >>
195
196 // Legacy values needed for open source purposes.
197 SlamCameraData = 1201,
198 SlamImuData = 1202,
199 SlamMagnetometerData = 1203,
200
201#if IS_VRS_FB_INTERNAL()
202#include "StreamId_fb.h"
203#endif
204
205 // Test devices start at 65500.
206 TestDevices = 65500,
207 UnitTest1 = TestDevices,
208 UnitTest2,
210
211 Undefined = 65535
212};
213
221string toString(RecordableTypeId typeId);
222
228
244class StreamId {
245 public:
246 StreamId() : typeId_{RecordableTypeId::Undefined}, instanceId_{0} {}
247 StreamId(const StreamId& rhs) = default;
248 StreamId(StreamId&& rhs) noexcept = default;
249 StreamId(RecordableTypeId typeId, uint16_t instanceId)
250 : typeId_{typeId}, instanceId_{instanceId} {}
251 ~StreamId() = default;
252
256 return typeId_;
257 }
258
261 uint16_t getInstanceId() const {
262 return instanceId_;
263 }
264
265 StreamId& operator=(const StreamId& rhs) = default;
266 StreamId& operator=(StreamId&& rhs) noexcept = default;
267 bool operator==(const StreamId& rhs) const {
268 return typeId_ == rhs.typeId_ && instanceId_ == rhs.instanceId_;
269 }
270
271 bool operator!=(const StreamId& rhs) const {
272 return !operator==(rhs);
273 }
274
276 bool operator<(const StreamId& rhs) const {
277 return typeId_ < rhs.typeId_ || (typeId_ == rhs.typeId_ && instanceId_ < rhs.instanceId_);
278 }
279
283 bool isValid() const {
284 return typeId_ != RecordableTypeId::Undefined;
285 }
286
289 string getTypeName() const {
290 return toString(typeId_);
291 }
294 string getName() const;
297 string getFullName() const;
300 string getNumericName() const;
304 static StreamId fromNumericName(const string& numericName);
309 static StreamId fromNumericNamePlus(const string& numericName);
310
314 static bool isKnownTypeId(RecordableTypeId typeId);
315
317 static StreamId lowest() {
318 return {static_cast<RecordableTypeId>(0), 0};
319 }
320
321 private:
322 RecordableTypeId typeId_;
323 uint16_t instanceId_;
324};
325
326} // namespace vrs
VRS stream identifier class.
Definition StreamId.h:244
static StreamId fromNumericName(const string &numericName)
Definition StreamId.cpp:233
string getTypeName() const
Definition StreamId.h:289
string getNumericName() const
Definition StreamId.cpp:229
bool isValid() const
Definition StreamId.h:283
static StreamId fromNumericNamePlus(const string &numericName)
Definition StreamId.cpp:237
string getFullName() const
Definition StreamId.cpp:224
string getName() const
Definition StreamId.cpp:220
RecordableTypeId getTypeId() const
Definition StreamId.h:255
static StreamId lowest()
StreamId value guaranteed to be smaller than any valid StreamId object.
Definition StreamId.h:317
uint16_t getInstanceId() const
Definition StreamId.h:261
static bool isKnownTypeId(RecordableTypeId typeId)
Definition StreamId.cpp:215
bool operator<(const StreamId &rhs) const
Compare operator, so that we can use StreamId in containers, with a guarantied behavior.
Definition StreamId.h:276
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:224
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.
@ BatteryRecordableClass
Battery data streams.
@ 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.