You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.7 KiB

using System.Collections.Generic;
using UnityEngine;
using Intel.RealSense;
using System;
using System.Collections;
using System.Linq;
public class RsDeviceInspector : MonoBehaviour
{
RsDevice rsdevice;
public bool streaming;
public Device device;
public readonly Dictionary<string, Sensor> sensors = new Dictionary<string, Sensor>();
public readonly Dictionary<string, List<IOption>> sensorOptions = new Dictionary<string, List<IOption>>();
void Awake()
{
StartCoroutine(WaitForDevice());
}
private IEnumerator WaitForDevice()
{
while (true)
{
yield return new WaitUntil(() => (rsdevice = GetComponent<RsDevice>()) != null);
// rsdevice.OnStart += onStartStreaming;
rsdevice.OnStop += onStopStreaming;
yield return new WaitUntil(() => rsdevice.Streaming);
onStartStreaming(rsdevice.ActiveProfile);
yield return new WaitWhile(() => rsdevice.Streaming);
}
}
private void onStopStreaming()
{
streaming = false;
if (device != null)
{
device.Dispose();
device = null;
}
foreach (var s in sensors)
{
var sensor = s.Value;
if (sensor != null)
sensor.Dispose();
}
sensors.Clear();
sensorOptions.Clear();
}
private void onStartStreaming(PipelineProfile profile)
{
device = profile.Device;
foreach (var s in device.Sensors)
{
var sensorName = s.Info[CameraInfo.Name];
sensors.Add(sensorName, s);
sensorOptions.Add(sensorName, s.Options.ToList());
}
streaming = true;
}
}