using UnityEngine;
using System;
using System.Runtime.InteropServices;
namespace SLAMUVC
{
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public struct UVCCtrlInfo
{
public string name;
public Int32 current;
public Int32 min;
public Int32 max;
public Int32 def;
public override string ToString()
{
return $"{base.ToString()}(name={name},min={min},max={max},def={def},current={current})";
}
}
[System.Serializable]
public class UVCCtrl
{
public string name;
public bool isAuto;
public bool isEnable;
public int[] limit;
public int value;
}
[System.Serializable]
public class UVCCtrlWrapper
{
public UVCCtrl[] uvcCtrls;
}
public enum CameraFormat
{
MJPEG,
YUV,
}
public enum CameraMirror
{
NONE,
HORIZONTAL,//ˮƽ��ת
VERTICAL//��ֱ��ת
}
public enum UVCCameraPixelFormat
{
PIXEL_FORMAT_RAW,
PIXEL_FORMAT_YUV,
PIXEL_FORMAT_NV12, // one format of YUV420SemiPlanar
PIXEL_FORMAT_NV21, // one format of YUV420SemiPlanar
PIXEL_FORMAT_RGB,
PIXEL_FORMAT_RGB565,
PIXEL_FORMAT_RGBX
}
public enum CameraStatus
{
Stopped = 0, // 摄像头停止
Started = 1, // 摄像头启动
Connecting = 2, // 连接设备中
Active = 3, // UI 激活
Idle = 4, // UI 空闲
Scanning = 5, // 硬件扫描中
NoDevice = 6, // 无设备
ResolutionChanged = 7, // 分辨率修改
RenderUpdate = 8, // 渲染更新
}
//UVC������
public abstract class UVCInterface : MonoBehaviour
{
// 初始化相机
public abstract void InitCamera(int width, int height);
// 打开相机
public abstract void OpenCamera();
// 关闭相机
public abstract void CloseCamera();
// 改变相机分辨率
public abstract void ChangeCameraInfo(int width, int height);
// 改变相机分辨率回调
public abstract void ChangeCameraInfoCallback(int width, int height);
// 获取支持的分辨率列表
public abstract string[] GetSupportedResolutions();
// 获取 UVC 控制列表(如亮度、对比度等控制功能)
public abstract string GetUvcCtrlList();
// 控制亮度
public abstract void SetBrightness(int value);
// 控制对比度
public abstract void SetContrast(int value);
// 设置 UVC 控制功能的值(如亮度、对比度)
public abstract int SetCtrlValue(string type, int value);
//
public abstract void FlipHorizontally();
//
public abstract void FlipVertically();
//重置参数
public abstract void resetControlParams();
public abstract bool GetIsPreviewing();
public abstract void OnTextureUpdate(int width, int height, bool bUpdate);
// 相机纹理
public abstract Texture2D CameraTexture { get; }
// UVC属性
public abstract UVCCtrl[] UVCCtrls { get; }
// 过度分辨率
public abstract int[] tempCameraSize { get; }
///
/// 摄像头权限成功事件
///
public event Action systemCameraPermissionHandle;
///
/// 摄像头纹理更新事件
///
public event Action cameraTextureHandle;
///
/// 触发摄像头权限成功事件(供子类调用)
///
public void OnCameraPermissionGranted()
{
systemCameraPermissionHandle?.Invoke();
}
///
/// 触发摄像头纹理更新事件(供子类调用)
///
public void OnCameraTextureUpdated()
{
cameraTextureHandle?.Invoke();
}
}
}