InputProvider.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Iisu;
  7. namespace bbiwarg.InputProviders
  8. {
  9. class InputProvider
  10. {
  11. public int ImageWidth { get; private set; }
  12. public int ImageHeight { get; private set; }
  13. public virtual int CurrentFrameID { get { return device.FrameId; } }
  14. public InputFrame CurrentFrame { get; private set; }
  15. protected IHandle handle;
  16. protected IDevice device;
  17. protected IDataHandle<Iisu.Data.IImageData> depthImage;
  18. protected IDataHandle<Iisu.Data.IImageData> confidenceImage;
  19. public void start()
  20. {
  21. createDevice();
  22. registerHandles();
  23. device.Start();
  24. device.UpdateFrame(true);
  25. ImageWidth = (int)depthImage.Value.ImageInfos.Width;
  26. ImageHeight = (int)depthImage.Value.ImageInfos.Height;
  27. device.ReleaseFrame();
  28. }
  29. public void stop()
  30. {
  31. device.Stop(true);
  32. }
  33. protected void createDevice()
  34. {
  35. handle = Iisu.Iisu.Context.CreateHandle();
  36. IDeviceConfiguration conf = createDeviceConfiguration();
  37. device = handle.InitializeDevice(conf);
  38. }
  39. protected virtual IDeviceConfiguration createDeviceConfiguration()
  40. {
  41. return handle.CreateDeviceConfiguration();
  42. }
  43. protected virtual void registerHandles()
  44. {
  45. depthImage = device.RegisterDataHandle<Iisu.Data.IImageData>("SOURCE.CAMERA.DEPTH.Image");
  46. confidenceImage = device.RegisterDataHandle<Iisu.Data.IImageData>("SOURCE.CAMERA.CONFIDENCE.Image");
  47. device.EventManager.RegisterEventListener("DEVICE.DataFrame", new onNewFrameDelegate(onNewFrame));
  48. }
  49. private delegate void onNewFrameDelegate(String name, uint frameID);
  50. private void onNewFrame(String name, uint frameID)
  51. {
  52. device.UpdateFrame(false);
  53. IntPtr rawDepthData = depthImage.Value.Raw;
  54. IntPtr rawConfidenceData = confidenceImage.Value.Raw;
  55. device.ReleaseFrame();
  56. CurrentFrame = new InputFrame(CurrentFrameID, ImageWidth, ImageHeight, rawDepthData, rawConfidenceData);
  57. }
  58. }
  59. }