Skip to content

Commit 37759f9

Browse files
kongchen1992meta-codesync[bot]
authored andcommitted
{Feature} Core - Replace EmgData with NeuralBandBatch for Meta Neural Band sensor stream
Summary: Refactors the reader-side sensor type for the Meta Neural Band batch stream (EMG + IMU accel + gyro) from `EmgData` into a new `NeuralBandBatch` type family. The new API delivers pre-decoded per-sub-sample structs (`NeuralBandEmgSample` / `NeuralBandAccelSample` / `NeuralBandGyroSample`) with reader-synthesized device-timeline timestamps, eliminating (1) the "one type for three semantically different things" confusion, (2) the raw `packed_channel_data` exposure that no consumer benefits from, (3) the silent shape-mismatch bug when malformed packets were skipped, and (4) the misleading `samples_per_batch` field name. Timestamp synthesis derives a batch-wide sub-sample period from wire packet cadence (before decode skipping) and back-fills per-sub-sample timestamps anchored at each wire packet's LAST-sub-sample time (the rebase convention). Runtime log-warn guards catch firmware convention drift, non-monotonic timestamps, single-packet-batch degradation, and post-rebase invariant violations without throwing. Wire schema and writer are unchanged; existing VRS recordings are read without modification. `SensorDataType::Emg` is renamed to `SensorDataType::NeuralBandBatch` (breaking); all in-tree consumers are updated in this diff. Static label parity between the reader's `NeuralBandBatchMetadata.h` and the writer's `EmgImuBatchLayout.h` is verified (all 18 DataLayout labels match byte-for-byte). A new backward- compat regression test (`NeuralBandBatchPlayerTest.BackwardCompat_ReadsSyntheticGen2FixtureViaFullPipeline`) exercises the full reader pipeline against a synthesized VRS fixture that uses the production wire flavor tag and label. Reproducibility: `buck2 build` and `buck2 test` pass across: - fbsource//arvr/projects/ariane/aria_research_kit/projectaria_tools/core/... - fbsource//arvr/projects/oatmeal/client_sdk/... - fbsource//arvr/projects/surreal/vrs_health_check/gen2_lib/... Reviewed By: ryanfrawley Differential Revision: D113434161 fbshipit-source-id: c720ef5acf55c97413d230a19e7f4e96e7536ef7
1 parent 4cc82b0 commit 37759f9

27 files changed

Lines changed: 1709 additions & 686 deletions

core/data_provider/RecordReaderInterface.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ RecordReaderInterface::RecordReaderInterface(
156156
std::map<vrs::StreamId, std::shared_ptr<PpgPlayer>>& ppgPlayers,
157157
std::map<vrs::StreamId, std::shared_ptr<AlsPlayer>>& alsPlayers,
158158
std::map<vrs::StreamId, std::shared_ptr<TemperaturePlayer>>& temperaturePlayers,
159-
std::map<vrs::StreamId, std::shared_ptr<EmgPlayer>>& emgPlayers,
159+
std::map<vrs::StreamId, std::shared_ptr<NeuralBandBatchPlayer>>& neuralBandBatchPlayers,
160160
std::map<vrs::StreamId, std::shared_ptr<VioPlayer>>& vioPlayers,
161161
std::map<vrs::StreamId, std::shared_ptr<VioHighFrequencyPlayer>>& vioHighFreqPlayers,
162162
std::map<vrs::StreamId, std::shared_ptr<EyeGazePlayer>>& eyegazePlayers,
@@ -176,7 +176,7 @@ RecordReaderInterface::RecordReaderInterface(
176176
ppgPlayers_(ppgPlayers),
177177
alsPlayers_(alsPlayers),
178178
temperaturePlayers_(temperaturePlayers),
179-
emgPlayers_(emgPlayers),
179+
neuralBandBatchPlayers_(neuralBandBatchPlayers),
180180
vioPlayers_(vioPlayers),
181181
vioHighFreqPlayers_(vioHighFreqPlayers),
182182
eyegazePlayers_(eyegazePlayers),
@@ -248,9 +248,9 @@ RecordReaderInterface::RecordReaderInterface(
248248
streamIdToSensorDataType_.emplace(streamId, SensorDataType::Temperature);
249249
}
250250

251-
for (const auto& [streamId, _] : emgPlayers_) {
251+
for (const auto& [streamId, _] : neuralBandBatchPlayers_) {
252252
streamIds_.insert(streamId);
253-
streamIdToSensorDataType_.emplace(streamId, SensorDataType::Emg);
253+
streamIdToSensorDataType_.emplace(streamId, SensorDataType::NeuralBandBatch);
254254
}
255255

256256
for (const auto& [streamId, _] : vioPlayers_) {
@@ -324,7 +324,7 @@ std::optional<VrsMetadata> RecordReaderInterface::getMetadata() const {
324324
case calibration::DeviceVersion::Gen2:
325325
fillMetadataForGen2(metadata, metadataJson);
326326
break;
327-
default:
327+
case calibration::DeviceVersion::NotValid:
328328
throw std::runtime_error(
329329
fmt::format(
330330
"Unsupported device version for loading metadata: {}", getName(deviceVersion_)));
@@ -566,8 +566,8 @@ SensorData RecordReaderInterface::getLastCachedSensorData(const vrs::StreamId& s
566566
}
567567
return {streamId, std::move(data), sensorDataType, recordTimeNs, timeSyncData};
568568
}
569-
case SensorDataType::Emg: {
570-
auto data = getLastCachedEmgData(streamId);
569+
case SensorDataType::NeuralBandBatch: {
570+
auto data = getLastCachedNeuralBandBatch(streamId);
571571
std::map<TimeSyncMode, int64_t> timeSyncData;
572572
for (const auto& mode : timeSyncMapper_->getTimeSyncModes()) {
573573
const int64_t& syncTimeNs =
@@ -623,7 +623,6 @@ SensorData RecordReaderInterface::getLastCachedSensorData(const vrs::StreamId& s
623623
return {streamId, std::move(data), sensorDataType, recordTimeNs, timeSyncData};
624624
}
625625
case SensorDataType::NotValid:
626-
default:
627626
break;
628627
}
629628
return {streamId, std::monostate{}, SensorDataType::NotValid, -1, {}};
@@ -728,11 +727,11 @@ BatteryStatusData RecordReaderInterface::getLastCachedBatteryStatusData(
728727
return batteryStatusData;
729728
}
730729

731-
EmgData RecordReaderInterface::getLastCachedEmgData(const vrs::StreamId& streamId) {
730+
NeuralBandBatch RecordReaderInterface::getLastCachedNeuralBandBatch(const vrs::StreamId& streamId) {
732731
std::unique_lock<std::mutex> readLock(*(streamIdToPlayerMutex_.at(streamId)));
733-
auto emgData = emgPlayers_[streamId]->getDataRecord();
732+
auto neuralBandBatch = neuralBandBatchPlayers_[streamId]->getDataRecord();
734733
streamIdToCondition_.at(streamId)->notify_one();
735-
return emgData;
734+
return neuralBandBatch;
736735
}
737736

738737
uint32_t RecordReaderInterface::getRgbIspTuningVersion() const {

core/data_provider/RecordReaderInterface.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
#include <data_provider/TimeSyncMapper.h>
2727
#include <data_provider/VrsMetadata.h>
2828
#include <data_provider/players/AlsPlayer.h>
29-
#include <data_provider/players/EmgPlayer.h>
3029
#include <data_provider/players/EyeGazePlayer.h>
3130
#include <data_provider/players/HandPosePlayer.h>
31+
#include <data_provider/players/NeuralBandBatchPlayer.h>
3232
#include <data_provider/players/PpgPlayer.h>
3333
#include <data_provider/players/TemperaturePlayer.h>
3434
#include <data_provider/players/VioHighFrequencyPlayer.h>
@@ -66,7 +66,7 @@ class RecordReaderInterface {
6666
std::map<vrs::StreamId, std::shared_ptr<PpgPlayer>>& ppgPlayers,
6767
std::map<vrs::StreamId, std::shared_ptr<AlsPlayer>>& alsPlayers,
6868
std::map<vrs::StreamId, std::shared_ptr<TemperaturePlayer>>& temperaturePlayers,
69-
std::map<vrs::StreamId, std::shared_ptr<EmgPlayer>>& emgPlayers,
69+
std::map<vrs::StreamId, std::shared_ptr<NeuralBandBatchPlayer>>& neuralBandBatchPlayers,
7070
std::map<vrs::StreamId, std::shared_ptr<VioPlayer>>& vioPlayers,
7171
std::map<vrs::StreamId, std::shared_ptr<VioHighFrequencyPlayer>>& vioHighFreqPlayers,
7272
std::map<vrs::StreamId, std::shared_ptr<EyeGazePlayer>>& eyegazePlayers,
@@ -105,7 +105,7 @@ class RecordReaderInterface {
105105
PpgData getLastCachedPpgData(const vrs::StreamId& streamId);
106106
AlsData getLastCachedAlsData(const vrs::StreamId& streamId);
107107
TemperatureData getLastCachedTemperatureData(const vrs::StreamId& streamId);
108-
EmgData getLastCachedEmgData(const vrs::StreamId& streamId);
108+
NeuralBandBatch getLastCachedNeuralBandBatch(const vrs::StreamId& streamId);
109109

110110
/* read the last cached on-device MP data in player */
111111
FrontendOutput getLastCachedVioData(const vrs::StreamId& streamId);
@@ -171,7 +171,7 @@ class RecordReaderInterface {
171171
std::map<vrs::StreamId, std::shared_ptr<PpgPlayer>> ppgPlayers_;
172172
std::map<vrs::StreamId, std::shared_ptr<AlsPlayer>> alsPlayers_;
173173
std::map<vrs::StreamId, std::shared_ptr<TemperaturePlayer>> temperaturePlayers_;
174-
std::map<vrs::StreamId, std::shared_ptr<EmgPlayer>> emgPlayers_;
174+
std::map<vrs::StreamId, std::shared_ptr<NeuralBandBatchPlayer>> neuralBandBatchPlayers_;
175175

176176
std::map<vrs::StreamId, std::shared_ptr<VioPlayer>> vioPlayers_;
177177
std::map<vrs::StreamId, std::shared_ptr<VioHighFrequencyPlayer>> vioHighFreqPlayers_;

core/data_provider/SensorConfiguration.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,11 @@ TemperatureConfiguration SensorConfiguration::temperatureConfiguration() const {
7979
sensorDataType_ == SensorDataType::Temperature, "Sensor data type is not Temperature");
8080
return std::get<TemperatureConfiguration>(sensorConfigurationVariant_);
8181
}
82-
EmgConfiguration SensorConfiguration::emgConfiguration() const {
83-
checkAndThrow(sensorDataType_ == SensorDataType::Emg, "Sensor data type is not Emg");
84-
return std::get<EmgConfiguration>(sensorConfigurationVariant_);
82+
NeuralBandBatchConfiguration SensorConfiguration::neuralBandBatchConfiguration() const {
83+
checkAndThrow(
84+
sensorDataType_ == SensorDataType::NeuralBandBatch,
85+
"Sensor data type is not NeuralBandBatch");
86+
return std::get<NeuralBandBatchConfiguration>(sensorConfigurationVariant_);
8587
}
8688
EyeGazeConfiguration SensorConfiguration::eyeGazeConfiguration() const {
8789
checkAndThrow(sensorDataType_ == SensorDataType::EyeGaze, "Sensor data type is not EyeGaze");
@@ -127,8 +129,9 @@ double SensorConfiguration::getNominalRateHz() const {
127129
return alsConfiguration().nominalRateHz;
128130
case SensorDataType::Temperature:
129131
return temperatureConfiguration().nominalRateHz;
130-
case SensorDataType::Emg:
131-
return emgConfiguration().nominalRateHz;
132+
case SensorDataType::NeuralBandBatch:
133+
// Sample rate not stored in config; infer from sample timestamps.
134+
return -1;
132135
case SensorDataType::EyeGaze:
133136
return eyeGazeConfiguration().nominalRateHz;
134137
case SensorDataType::HandPose:
@@ -138,9 +141,9 @@ double SensorConfiguration::getNominalRateHz() const {
138141
case SensorDataType::VioHighFreq:
139142
return vioHighFreqConfiguration().nominalRateHz;
140143
case SensorDataType::NotValid:
141-
default:
142144
return -1;
143145
}
146+
return -1;
144147
}
145148

146149
} // namespace projectaria::tools::data_provider

core/data_provider/SensorConfiguration.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@
2323
#include <data_provider/players/BarometerPlayer.h>
2424
#include <data_provider/players/BatteryStatusPlayer.h>
2525
#include <data_provider/players/BluetoothBeaconPlayer.h>
26-
#include <data_provider/players/EmgPlayer.h>
2726
#include <data_provider/players/EyeGazePlayer.h>
2827
#include <data_provider/players/GpsPlayer.h>
2928
#include <data_provider/players/HandPosePlayer.h>
3029
#include <data_provider/players/ImageSensorPlayer.h>
3130
#include <data_provider/players/MotionSensorPlayer.h>
31+
#include <data_provider/players/NeuralBandBatchPlayer.h>
3232
#include <data_provider/players/PpgPlayer.h>
3333
#include <data_provider/players/TemperaturePlayer.h>
3434
#include <data_provider/players/VioHighFrequencyPlayer.h>
@@ -58,7 +58,7 @@ class SensorConfiguration {
5858
PpgConfiguration,
5959
AlsConfiguration,
6060
TemperatureConfiguration,
61-
EmgConfiguration,
61+
NeuralBandBatchConfiguration,
6262
EyeGazeConfiguration,
6363
HandPoseConfiguration,
6464
VioConfiguration,
@@ -145,10 +145,10 @@ class SensorConfiguration {
145145
[[nodiscard]] TemperatureConfiguration temperatureConfiguration() const;
146146

147147
/**
148-
* @brief Returns the sensor configuration as EmgConfiguration
149-
* @pre type is Emg
148+
* @brief Returns the sensor configuration as NeuralBandBatchConfiguration
149+
* @pre type is NeuralBandBatch
150150
*/
151-
[[nodiscard]] EmgConfiguration emgConfiguration() const;
151+
[[nodiscard]] NeuralBandBatchConfiguration neuralBandBatchConfiguration() const;
152152

153153
/**
154154
* @brief Returns the sensor configuration as HandPoseConfiguration

core/data_provider/SensorData.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,11 @@ TemperatureData SensorData::temperatureData() const {
9292
return std::get<TemperatureData>(dataVariant_);
9393
}
9494

95-
EmgData SensorData::emgData() const {
96-
checkAndThrow(sensorDataType_ == SensorDataType::Emg, "Sensor data type is not EMG");
97-
return std::get<EmgData>(dataVariant_);
95+
NeuralBandBatch SensorData::neuralBandBatchData() const {
96+
checkAndThrow(
97+
sensorDataType_ == SensorDataType::NeuralBandBatch,
98+
"Sensor data type is not NeuralBandBatch");
99+
return std::get<NeuralBandBatch>(dataVariant_);
98100
}
99101

100102
BatteryStatusData SensorData::batteryStatusData() const {
@@ -150,8 +152,8 @@ int64_t SensorData::getDeviceTime() const {
150152
return alsData().captureTimestampNs;
151153
case SensorDataType::Temperature:
152154
return temperatureData().captureTimestampNs;
153-
case SensorDataType::Emg:
154-
return emgData().captureTimestampNs;
155+
case SensorDataType::NeuralBandBatch:
156+
return neuralBandBatchData().captureTimestampNs;
155157
case SensorDataType::BatteryStatus:
156158
return batteryStatusData().captureTimestampNs;
157159

@@ -194,7 +196,7 @@ int64_t SensorData::getHostTime() const {
194196
case SensorDataType::Ppg:
195197
case SensorDataType::Als:
196198
case SensorDataType::Temperature:
197-
case SensorDataType::Emg:
199+
case SensorDataType::NeuralBandBatch:
198200
case SensorDataType::Vio:
199201
case SensorDataType::VioHighFreq:
200202
case SensorDataType::EyeGaze:

core/data_provider/SensorData.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
#include <data_provider/players/BarometerPlayer.h>
2525
#include <data_provider/players/BatteryStatusPlayer.h>
2626
#include <data_provider/players/BluetoothBeaconPlayer.h>
27-
#include <data_provider/players/EmgPlayer.h>
2827
#include <data_provider/players/GpsPlayer.h>
2928
#include <data_provider/players/ImageSensorPlayer.h>
3029
#include <data_provider/players/MotionSensorPlayer.h>
30+
#include <data_provider/players/NeuralBandBatchPlayer.h>
3131
#include <data_provider/players/PpgPlayer.h>
3232
#include <data_provider/players/TemperaturePlayer.h>
3333
#include <data_provider/players/VioPlayer.h>
@@ -70,7 +70,7 @@ class SensorData {
7070
PpgData,
7171
AlsData,
7272
TemperatureData,
73-
EmgData,
73+
NeuralBandBatch,
7474
/* on device MP data types*/
7575
FrontendOutput,
7676
OnDeviceVioHighFreqData,
@@ -171,10 +171,10 @@ class SensorData {
171171
[[nodiscard]] TemperatureData temperatureData() const;
172172

173173
/**
174-
* @brief Returns the sensor data as EmgData
175-
* @pre type is Emg
174+
* @brief Returns the sensor data as NeuralBandBatch
175+
* @pre type is NeuralBandBatch
176176
*/
177-
[[nodiscard]] EmgData emgData() const;
177+
[[nodiscard]] NeuralBandBatch neuralBandBatchData() const;
178178

179179
/**
180180
* @brief Returns the sensor data as BatteryStatusData

core/data_provider/SensorDataType.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ std::string getName(const SensorDataType type) {
4040
{SensorDataType::VioHighFreq, "VIO high freq"},
4141
{SensorDataType::EyeGaze, "eyegaze"},
4242
{SensorDataType::HandPose, "hand pose"},
43-
{SensorDataType::Emg, "EMG"},
43+
{SensorDataType::NeuralBandBatch, "NeuralBandBatch"},
4444
{SensorDataType::NotValid, "invalid"}};
4545
return kTypeNameMap.at(type);
4646
}

core/data_provider/SensorDataType.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ enum class SensorDataType {
4747
VioHighFreq, /**< On Device VIO high frequency data streams*/
4848
EyeGaze, /**< On Device Eye gaze data streams*/
4949
HandPose, /**< On Device Hand tracking data streams*/
50-
Emg, /**< Electromyography (EMG) IMU batch data streams */
50+
NeuralBandBatch, /**< Meta Neural Band batch data streams (EMG + IMU accel + gyro) */
5151
};
5252

5353
/** @brief converts the enum to readable std::string */

core/data_provider/StreamIdConfigurationMapper.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ StreamIdConfigurationMapper::StreamIdConfigurationMapper(
3737
std::map<vrs::StreamId, std::shared_ptr<PpgPlayer>>& ppgPlayers,
3838
std::map<vrs::StreamId, std::shared_ptr<AlsPlayer>>& alsPlayers,
3939
std::map<vrs::StreamId, std::shared_ptr<TemperaturePlayer>>& temperaturePlayers,
40-
std::map<vrs::StreamId, std::shared_ptr<EmgPlayer>>& emgPlayers,
40+
std::map<vrs::StreamId, std::shared_ptr<NeuralBandBatchPlayer>>& neuralBandBatchPlayers,
4141
std::map<vrs::StreamId, std::shared_ptr<EyeGazePlayer>>& EyeGazePlayers,
4242
std::map<vrs::StreamId, std::shared_ptr<HandPosePlayer>>& handPosePlayers,
4343
std::map<vrs::StreamId, std::shared_ptr<VioPlayer>>& vioPlayers,
@@ -90,8 +90,8 @@ StreamIdConfigurationMapper::StreamIdConfigurationMapper(
9090
for (const auto& [streamId, temperaturePlayer] : temperaturePlayers) {
9191
streamIdToTemperatureConfig_.emplace(streamId, temperaturePlayer->getConfigRecord());
9292
}
93-
for (const auto& [streamId, emgPlayer] : emgPlayers) {
94-
streamIdToEmgConfig_.emplace(streamId, emgPlayer->getConfigRecord());
93+
for (const auto& [streamId, neuralBandBatchPlayer] : neuralBandBatchPlayers) {
94+
streamIdToNeuralBandBatchConfig_.emplace(streamId, neuralBandBatchPlayer->getConfigRecord());
9595
}
9696
}
9797

@@ -158,9 +158,9 @@ TemperatureConfiguration StreamIdConfigurationMapper::getTemperatureConfiguratio
158158
return streamIdToTemperatureConfig_.at(streamId);
159159
}
160160

161-
EmgConfiguration StreamIdConfigurationMapper::getEmgConfiguration(
161+
NeuralBandBatchConfiguration StreamIdConfigurationMapper::getNeuralBandBatchConfiguration(
162162
const vrs::StreamId& streamId) const {
163-
return streamIdToEmgConfig_.at(streamId);
163+
return streamIdToNeuralBandBatchConfig_.at(streamId);
164164
}
165165

166166
EyeGazeConfiguration StreamIdConfigurationMapper::getEyeGazeConfiguration(

core/data_provider/StreamIdConfigurationMapper.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class StreamIdConfigurationMapper {
3939
std::map<vrs::StreamId, std::shared_ptr<PpgPlayer>>& ppgPlayers,
4040
std::map<vrs::StreamId, std::shared_ptr<AlsPlayer>>& alsPlayers,
4141
std::map<vrs::StreamId, std::shared_ptr<TemperaturePlayer>>& temperaturePlayers,
42-
std::map<vrs::StreamId, std::shared_ptr<EmgPlayer>>& emgPlayers,
42+
std::map<vrs::StreamId, std::shared_ptr<NeuralBandBatchPlayer>>& neuralBandBatchPlayers,
4343
std::map<vrs::StreamId, std::shared_ptr<EyeGazePlayer>>& EyeGazePlayers,
4444
std::map<vrs::StreamId, std::shared_ptr<HandPosePlayer>>& handPosePlayers,
4545
std::map<vrs::StreamId, std::shared_ptr<VioPlayer>>& vioPlayers,
@@ -64,7 +64,8 @@ class StreamIdConfigurationMapper {
6464
[[nodiscard]] AlsConfiguration getAlsConfiguration(const vrs::StreamId& streamId) const;
6565
[[nodiscard]] TemperatureConfiguration getTemperatureConfiguration(
6666
const vrs::StreamId& streamId) const;
67-
[[nodiscard]] EmgConfiguration getEmgConfiguration(const vrs::StreamId& streamId) const;
67+
[[nodiscard]] NeuralBandBatchConfiguration getNeuralBandBatchConfiguration(
68+
const vrs::StreamId& streamId) const;
6869
[[nodiscard]] EyeGazeConfiguration getEyeGazeConfiguration(const vrs::StreamId& streamId) const;
6970
[[nodiscard]] HandPoseConfiguration getHandPoseConfiguration(const vrs::StreamId& streamId) const;
7071
[[nodiscard]] VioConfiguration getVioConfiguration(const vrs::StreamId& streamId) const;
@@ -84,7 +85,7 @@ class StreamIdConfigurationMapper {
8485
std::map<vrs::StreamId, PpgConfiguration> streamIdToPpgConfig_;
8586
std::map<vrs::StreamId, AlsConfiguration> streamIdToAlsConfig_;
8687
std::map<vrs::StreamId, TemperatureConfiguration> streamIdToTemperatureConfig_;
87-
std::map<vrs::StreamId, EmgConfiguration> streamIdToEmgConfig_;
88+
std::map<vrs::StreamId, NeuralBandBatchConfiguration> streamIdToNeuralBandBatchConfig_;
8889
std::map<vrs::StreamId, EyeGazeConfiguration> streamIdToEyeGazeConfig_;
8990
std::map<vrs::StreamId, HandPoseConfiguration> streamIdToHandPoseConfig_;
9091
std::map<vrs::StreamId, VioConfiguration> streamIdToVioConfig_;

0 commit comments

Comments
 (0)