UVCInterface.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using UnityEngine;
  2. using System;
  3. using System.Runtime.InteropServices;
  4. namespace SLAMUVC
  5. {
  6. [StructLayout(LayoutKind.Sequential, Pack = 4)]
  7. public struct UVCCtrlInfo
  8. {
  9. public string name;
  10. public Int32 current;
  11. public Int32 min;
  12. public Int32 max;
  13. public Int32 def;
  14. public override string ToString()
  15. {
  16. return $"{base.ToString()}(name={name},min={min},max={max},def={def},current={current})";
  17. }
  18. }
  19. [System.Serializable]
  20. public class UVCCtrl
  21. {
  22. public string name;
  23. public bool isAuto;
  24. public bool isEnable;
  25. public int[] limit;
  26. public int value;
  27. }
  28. [System.Serializable]
  29. public class UVCCtrlWrapper
  30. {
  31. public UVCCtrl[] uvcCtrls;
  32. }
  33. public enum CameraFormat
  34. {
  35. MJPEG,
  36. YUV,
  37. }
  38. public enum CameraMirror
  39. {
  40. NONE,
  41. HORIZONTAL,//ˮƽ��ת
  42. VERTICAL//��ֱ��ת
  43. }
  44. public enum UVCCameraPixelFormat
  45. {
  46. PIXEL_FORMAT_RAW,
  47. PIXEL_FORMAT_YUV,
  48. PIXEL_FORMAT_NV12, // one format of YUV420SemiPlanar
  49. PIXEL_FORMAT_NV21, // one format of YUV420SemiPlanar
  50. PIXEL_FORMAT_RGB,
  51. PIXEL_FORMAT_RGB565,
  52. PIXEL_FORMAT_RGBX
  53. }
  54. public enum CameraStatus
  55. {
  56. Stopped = 0, // 摄像头停止
  57. Started = 1, // 摄像头启动
  58. Connecting = 2, // 连接设备中
  59. Active = 3, // UI 激活
  60. Idle = 4, // UI 空闲
  61. Scanning = 5, // 硬件扫描中
  62. NoDevice = 6, // 无设备
  63. ResolutionChanged = 7, // 分辨率修改
  64. RenderUpdate = 8, // 渲染更新
  65. }
  66. //UVC������
  67. public abstract class UVCInterface : MonoBehaviour
  68. {
  69. // 初始化相机
  70. public abstract void InitCamera(int width, int height);
  71. // 打开相机
  72. public abstract void OpenCamera();
  73. // 关闭相机
  74. public abstract void CloseCamera();
  75. // 改变相机分辨率
  76. public abstract void ChangeCameraInfo(int width, int height);
  77. // 改变相机分辨率回调
  78. public abstract void ChangeCameraInfoCallback(int width, int height);
  79. // 获取支持的分辨率列表
  80. public abstract string[] GetSupportedResolutions();
  81. // 获取 UVC 控制列表(如亮度、对比度等控制功能)
  82. public abstract string GetUvcCtrlList();
  83. // 控制亮度
  84. public abstract void SetBrightness(int value);
  85. // 控制对比度
  86. public abstract void SetContrast(int value);
  87. // 设置 UVC 控制功能的值(如亮度、对比度)
  88. public abstract int SetCtrlValue(string type, int value);
  89. //
  90. public abstract void FlipHorizontally();
  91. //
  92. public abstract void FlipVertically();
  93. //重置参数
  94. public abstract void resetControlParams();
  95. public abstract bool GetIsPreviewing();
  96. public abstract void OnTextureUpdate(int width, int height, bool bUpdate);
  97. // 相机纹理
  98. public abstract Texture2D CameraTexture { get; }
  99. // UVC属性
  100. public abstract UVCCtrl[] UVCCtrls { get; }
  101. // 过度分辨率
  102. public abstract int[] tempCameraSize { get; }
  103. /// <summary>
  104. /// 摄像头权限成功事件
  105. /// </summary>
  106. public event Action systemCameraPermissionHandle;
  107. /// <summary>
  108. /// 摄像头纹理更新事件
  109. /// </summary>
  110. public event Action cameraTextureHandle;
  111. /// <summary>
  112. /// 触发摄像头权限成功事件(供子类调用)
  113. /// </summary>
  114. public void OnCameraPermissionGranted()
  115. {
  116. systemCameraPermissionHandle?.Invoke();
  117. }
  118. /// <summary>
  119. /// 触发摄像头纹理更新事件(供子类调用)
  120. /// </summary>
  121. public void OnCameraTextureUpdated()
  122. {
  123. cameraTextureHandle?.Invoke();
  124. }
  125. }
  126. }