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#include <string_view>
22
23#include <vrs/os/Platform.h>
24
25namespace vrs {
26
27using std::string;
28using std::string_view;
29
51enum class RecordableTypeId : uint16_t {
52 // for VRS internal use only
53 VRSIndex = 1,
54 VRSDescription = 2,
55
56 // Generic devices using RecordFormat and DataLayout, and following DataLayout conventions.
57 ImageStream = 100,
58 AudioStream = 101,
59 AnnotationStream = 102,
60 ArchiveStream = 103,
61
62 // << Start of Recordable Class IDs >>
63
64 // "Recordable Class" IDs designed to make adding new enum values unnecessary going forward.
65 // Use a combination of "Recordable Class" ID and "flavor" to describe your use case uniquely.
66 // Many of these recordable class IDs are in anticipation of a potential future use case.
67
68 // << Cameras >>
69 // Cameras are arguably the most the important and common class of devices of all.
70 // New devices include many different types at the same time, hence the wide variety offered.
71
90
91 // << Microphones >>
95
96 // << Discrete Sensors >>
98 ImuRecordableClass = 241,
106 EMGRecordableClass = 249,
110 CsaRecordableClass = 253,
117 // << Discrete sensors continue below at 500 >>
118
119 // << Calibration, Setup, Diagnostic, etc >>
127
128 // << External Signals >>
129 SyncRecordableClass = 280,
130 GpsRecordableClass = 281,
133 UsbRecordableClass = 284,
134 TimeRecordableClass = 285,
136 GMSRecordableClass = 287,
137
138 // << User Input >>
145
146 // << Events, commands, instructions, etc >>
153
154 // << Ground Truth >>
161
162 // << Results of all kinds >>
164 PoseRecordableClass = 371,
166 GazeRecordableClass = 373,
167 MeshRecordableClass = 374,
170 MapRecordableClass = 377,
174 TextRecordableClass = 381,
180
181 // << Annotations >>
183
184 // << Discrete Sensors (continued) >>
190
191 // << Test, Samples and other fake devices >>
194
195 // The range 200-999 is reserved for "Recordable Class" IDs exclusively.
198
199 // << End of Recordable Class IDs >>
200
201 // Legacy values needed for open source purposes.
202 SlamCameraData = 1201,
203 SlamImuData = 1202,
204 SlamMagnetometerData = 1203,
205
206#if IS_VRS_FB_INTERNAL()
207#include <vrs/StreamId_fb.h>
208#endif
209
210 // Test devices start at 65500.
211 TestDevices = 65500,
212 UnitTest1 = TestDevices,
213 UnitTest2,
215
216 Undefined = 65535
217};
218
226string toString(RecordableTypeId typeId);
227
233
249class StreamId {
250 public:
251 StreamId() : typeId_{RecordableTypeId::Undefined}, instanceId_{0} {}
252 StreamId(const StreamId& rhs) = default;
253 StreamId(StreamId&& rhs) noexcept = default;
254 StreamId(RecordableTypeId typeId, uint16_t instanceId)
255 : typeId_{typeId}, instanceId_{instanceId} {}
256 ~StreamId() = default;
257
261 return typeId_;
262 }
263
266 uint16_t getInstanceId() const {
267 return instanceId_;
268 }
269
270 StreamId& operator=(const StreamId& rhs) = default;
271 StreamId& operator=(StreamId&& rhs) noexcept = default;
272 bool operator==(const StreamId& rhs) const {
273 return typeId_ == rhs.typeId_ && instanceId_ == rhs.instanceId_;
274 }
275
276 bool operator!=(const StreamId& rhs) const {
277 return !operator==(rhs);
278 }
279
281 bool operator<(const StreamId& rhs) const {
282 return typeId_ < rhs.typeId_ || (typeId_ == rhs.typeId_ && instanceId_ < rhs.instanceId_);
283 }
284
288 bool isValid() const {
289 return typeId_ != RecordableTypeId::Undefined;
290 }
291
294 string getTypeName() const {
295 return toString(typeId_);
296 }
299 string getName() const;
302 string getFullName() const;
305 string getNumericName() const;
309 static StreamId fromNumericName(string_view numericName);
314 static StreamId fromNumericNamePlus(string_view numericName);
315
319 static bool isKnownTypeId(RecordableTypeId typeId);
320
322 static StreamId lowest() {
323 return {static_cast<RecordableTypeId>(0), 0};
324 }
325
326 private:
327 RecordableTypeId typeId_;
328 uint16_t instanceId_;
329};
330
331} // namespace vrs
VRS stream identifier class.
Definition StreamId.h:249
string getTypeName() const
Definition StreamId.h:294
static StreamId fromNumericNamePlus(string_view numericName)
Definition StreamId.cpp:240
string getNumericName() const
Definition StreamId.cpp:232
bool isValid() const
Definition StreamId.h:288
string getFullName() const
Definition StreamId.cpp:228
string getName() const
Definition StreamId.cpp:224
static StreamId fromNumericName(string_view numericName)
Definition StreamId.cpp:236
RecordableTypeId getTypeId() const
Definition StreamId.h:260
static StreamId lowest()
StreamId value guaranteed to be smaller than any valid StreamId object.
Definition StreamId.h:322
uint16_t getInstanceId() const
Definition StreamId.h:266
static bool isKnownTypeId(RecordableTypeId typeId)
Definition StreamId.cpp:219
bool operator<(const StreamId &rhs) const
Compare operator, so that we can use StreamId in containers, with a guarantied behavior.
Definition StreamId.h:281
Definition Compressor.cpp:112
@ Undefined
when not set explicitly
bool isARecordableClass(RecordableTypeId typeId)
Tell if an id is that of a "Recordable Class".
Definition StreamId.h:229
RecordableTypeId
VRS stream type or class identifier enum.
Definition StreamId.h:51
@ 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.
@ AlsFlickerDetectionRecordableClass
ALS light flicker detection 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.
@ Detection2dRecordableClass
For 2D detection data streams (bboxes, scores, labels).
@ 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).
@ ProximitySensorRecordableClass
For proximity sensor data streams.
@ 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.