Эх сурвалжийг харах

1.添加分辨率修改测试

slambb 1 жил өмнө
parent
commit
9da92f9ef3

+ 58 - 1
Assets/BowArrow/InfraredCamera/InfraredDemo.cs

@@ -25,6 +25,7 @@ public class InfraredDemo : MonoBehaviour
         //直接初始化一次
         _ins.InitInfraredCamera();
     }
+   
 
     void Start()
     {
@@ -99,7 +100,7 @@ public class InfraredDemo : MonoBehaviour
     [SerializeField] Slider _sliderDelay;
 
     [SerializeField] Dropdown _dropdownResolution;
-
+    [SerializeField] Dropdown _dropdownResolution2;
 
     [SerializeField] Slider _sliderLineWidth;
 
@@ -113,6 +114,7 @@ public class InfraredDemo : MonoBehaviour
 
     public ParamFloatValue shakeFilterValue = new ParamFloatValue("ic_shakeFilterValue2", 6.0f);
     public ParamFloatValue resoution = new ParamFloatValue("ic_resoution2", 2);
+    public ParamFloatValue resoutionNew = new ParamFloatValue("ic_resoutionNew", 0);
 
     public ParamFloatValue lineWidth = new ParamFloatValue("ic_lineWidth", 20.0f);
 
@@ -394,6 +396,12 @@ public class InfraredDemo : MonoBehaviour
             StartCoroutine(RestartOrKillApp());
         });
 
+        SetResolutionNew((int)resoutionNew.Get());
+        _dropdownResolution2.onValueChanged.AddListener(v =>
+        {
+            SetResolutionNew(v);
+        });
+
         //绘制线段
         SetLineWidth(lineWidth.Get());
         _sliderLineWidth.onValueChanged.AddListener(SetLineWidth);
@@ -545,6 +553,55 @@ public class InfraredDemo : MonoBehaviour
                 break;
         }
     }
+
+    void SetResolutionNew(int optionIndex)
+    {
+        resoutionNew.Set(optionIndex);
+        _dropdownResolution2.SetValueWithoutNotify(optionIndex);
+        switch (optionIndex)
+        {
+            case 0:
+                infraredCameraHelper.SetCameraResolutionNew(1920, 1080);
+                break;
+            case 1:
+                infraredCameraHelper.SetCameraResolutionNew(1280, 800);
+                break;
+            case 2:
+                infraredCameraHelper.SetCameraResolutionNew(1280, 720);
+                break;
+            case 3:
+                infraredCameraHelper.SetCameraResolutionNew(1024, 768);
+                break;
+            case 4:
+                infraredCameraHelper.SetCameraResolutionNew(960, 540);
+                break;
+            case 5:
+                infraredCameraHelper.SetCameraResolutionNew(800, 600);
+                break;
+            case 6:
+                infraredCameraHelper.SetCameraResolutionNew(848, 480);
+                break;
+            case 7:
+                infraredCameraHelper.SetCameraResolutionNew(640, 480);
+                break;
+            case 8:
+                infraredCameraHelper.SetCameraResolutionNew(640, 360);
+                break;
+            case 9:
+                infraredCameraHelper.SetCameraResolutionNew(352, 288);
+                break;
+            case 10:
+                infraredCameraHelper.SetCameraResolutionNew(320, 240);
+                break;
+            case 11:
+                //不支持这种分辨率设置
+                infraredCameraHelper.SetCameraResolutionNew(1280, 960);
+                break;
+        }
+    }
+
+
+
     void OnClick_Reset()
     {
         //SetBrightness(1);

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 944 - 13
Assets/BowArrow/InfraredCamera/Resources/InfraredDemo.prefab


+ 9 - 0
Assets/InfraredProject/InfraredCamera/Scripts/InfraredCameraHelper.cs

@@ -135,6 +135,15 @@ namespace InfraredManager
             Debug.Log("设置分辨率,width:" + width + " ,height:" + height);
         }
         /// <summary>
+        /// 设置相机画面分辨率
+        /// </summary>
+        public void SetCameraResolutionNew(int width, int height)
+        {
+
+            Debug.Log("设置分辨率,width:" + width + " ,height:" + height);
+            _screenLocate.Resize(width, height);
+        }
+        /// <summary>
         /// 获取相机画面分辨率
         /// </summary>
         public Vector2 GetCameraResolution()

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 1452 - 185
Assets/InfraredProject/UVC4UnityAndroidPlugin/Samples/Scenes/UVC2DScene.unity


+ 8 - 4
Assets/InfraredProject/UVC4UnityAndroidPlugin/Scripts/UVCManager.cs

@@ -138,14 +138,18 @@ namespace Serenegiant.UVC
             PU_CONTRAST_AUTO,
 
         };
-    
-        //--------------------------------------------------------------------------------
-        /**
+		//测试重置接口
+		internal static int onResize(int id, int frameType, int width, int height)
+		{
+			return Resize(id, frameType, width, height);
+		}
+		//--------------------------------------------------------------------------------
+		/**
 		 * IUVCSelectorがセットされていないとき
 		 * またはIUVCSelectorが解像度選択時にnullを
 		 * 返したときのデフォルトの解像度(幅)
 		*/
-        public Int32 DefaultWidth = 1280;
+		public Int32 DefaultWidth = 1280;
 		/**
 		 * IUVCSelectorがセットされていないとき
 		 * またはIUVCSelectorが解像度選択時にnullを

+ 267 - 0
Assets/InfraredProject/UVC4UnityAndroidPlugin/UITest.cs

@@ -0,0 +1,267 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Serenegiant.UVC;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class UITest : MonoBehaviour
+{
+    public GameObject togglePrefab; // 拖入一个Toggle预设体
+
+    public GameObject sliderPrefab; // 拖入一个Slider预设体
+    public GameObject spawnPoint;
+
+    public UVCManager mUVCManager;
+    public UVCDrawer mUVCDrawer;
+    public UVCManager.CameraInfo cameraInfo;
+
+
+    [SerializeField] Dropdown _dropdownResolution;
+
+
+    //自动曝光
+    bool bAutoAE = false;
+    Slider CTRLAEABSSlider; 
+    //PU_BRIGHTNESS(亮度)
+    //PU_CONTRAST(对比度)
+    //PU_HUE(色调)
+    //PU_SATURATION(饱和度)
+    //PU_SHARPNESS(锐度)
+    //PU_GAMMA(伽玛)
+    //PU_WB_TEMP(白平衡温度)
+    //PU_WB_COMPO(白平衡分量)
+    //PU_BACKLIGHT(背光补偿)
+    //PU_GAIN(增益)
+    //PU_POWER_LF(电源线频率)
+    //PU_HUE_AUTO(色相,自动)
+    //PU_WB_TEMP_AUTO(白平衡温度,自动)
+    //PU_WB_COMPO_AUTO(白平衡分量,自动)
+    //PU_DIGITAL_MULT(数字乘法器)
+    //PU_DIGITAL_LIMIT(数字乘数限制)
+    //PU_AVIDEO_STD(模拟视频标准)
+    //PU_AVIDEO_LOCK(模拟视频锁定状态)
+    //PU_CONTRAST_AUTO(对比度,自动)
+    string[] sliderNameArray = new string[]{
+        "自动曝光模式",
+        "曝光时间(绝对)",
+
+        "亮度", //
+        "对比度",
+        "色调",
+        "饱和度",
+        "锐度",
+        "白平衡温度",
+        //"白平衡分量",
+        "伽玛",
+        "背光补偿",
+        "增益" };
+
+    string[] sliderStrArray = new string[]{
+        "CTRL_AE",
+        "CTRL_AE_ABS",
+
+        "PU_BRIGHTNESS",
+        "PU_CONTRAST",
+        "PU_HUE",
+        "PU_SATURATION",
+        "PU_SHARPNESS",
+        "PU_GAMMA",
+        "PU_WB_TEMP",
+        //"PU_WB_COMPO",
+        "PU_BACKLIGHT",
+        "PU_GAIN" };
+
+    public void initSlider()
+    {
+
+        for (int i = 0; i < sliderStrArray.Length; i++)
+        {
+            string typeStr = sliderStrArray[i];
+            UInt64 _VALUE = cameraInfo.GetTypeByName(typeStr);
+            //不支持的,跳过
+            bool bContains = cameraInfo.ContainsKey(_VALUE);
+            if (!bContains) continue;
+            if (typeStr == "CTRL_AE")
+            {
+                //如果是自动曝光,使用toggle 选择
+                GameObject toggleObject = Instantiate(togglePrefab, spawnPoint.transform);
+                toggleObject.SetActive(true);
+                Text labelObj = toggleObject.transform.Find("Label").GetComponent<Text>();
+                labelObj.text = sliderNameArray[i];
+                Toggle toggle = toggleObject.GetComponent<Toggle>();
+
+                UVCCtrlInfo _AEInfo = cameraInfo.GetInfo(_VALUE);
+                bAutoAE = _AEInfo.def == 8 ? true : false;
+
+                toggle.onValueChanged.AddListener((bool bValue) =>
+                {
+                    //Debug.Log("Toggle value changed to: " + bValue + " from " + _VALUE);
+                    if (typeStr == "CTRL_AE")
+                    {
+                        //开关控制是否自动曝光
+                        bAutoAE = bValue;
+                        if(CTRLAEABSSlider) CTRLAEABSSlider.interactable = !bAutoAE;
+                        int _value = bValue ? 8 : 1;
+                        //Debug.Log("_value " + _value);
+                        cameraInfo.SetValue(_VALUE, _value);
+                    }
+
+                });
+            }
+            else
+            {
+                //其余使用slider
+                GameObject sliderObject = Instantiate(sliderPrefab, spawnPoint.transform);
+                sliderObject.SetActive(true);
+                Slider slider = sliderObject.GetComponent<Slider>();
+
+                if (typeStr == "CTRL_AE_ABS") {
+                    CTRLAEABSSlider = slider;
+                    slider.interactable = !bAutoAE;
+                }
+
+                Text textObj = sliderObject.transform.Find("text").GetComponent<Text>();
+                Text titleTextObj = sliderObject.transform.Find("title").GetComponent<Text>();
+                titleTextObj.text = sliderNameArray[i];//类型名字
+                if (slider != null)
+                {
+
+                    UVCCtrlInfo _UVCCtrlInfo = cameraInfo.GetInfo(_VALUE);
+                    slider.minValue = _UVCCtrlInfo.min;
+                    slider.maxValue = _UVCCtrlInfo.max;
+                    slider.wholeNumbers = true; 
+                    slider.value = _UVCCtrlInfo.def;
+                    // 可以添加更多的配置,例如添加监听事件等
+                    textObj.text = _UVCCtrlInfo.def + "";
+
+                    //如果有存储到初始值,设置一次
+                    //cameraInfo.SetValue(BRIGHTNESS_VALUE, xxx);
+
+                    slider.onValueChanged.AddListener((newValue) =>
+                    {
+                        var _value = Mathf.FloorToInt(newValue);
+                        textObj.text = _value + "";
+                        //Debug.Log("Slider value changed to: " + newValue + " from " + _VALUE);
+                        cameraInfo.SetValue(_VALUE, _value);
+                    });
+                }
+            }
+        }
+    }
+
+    public void getDevices()
+    {
+        List<UVCManager.CameraInfo> cameraInfos = mUVCManager.GetAttachedDevices();
+        for (int i = 0; i < cameraInfos.Count; i++)
+        {
+            Debug.Log("Device Name " + i + ":" + cameraInfos[i].DeviceName);
+        }
+        cameraInfo = cameraInfos[0];
+    }
+    void Awake()
+    {
+
+        if (mUVCDrawer)
+            mUVCDrawer.StartPreviewAction += UVCIsReady;
+
+
+
+        _dropdownResolution.onValueChanged.AddListener(v =>
+        {
+            SetResolution(v);
+        });
+    }
+
+    void OnDestroy()
+    {
+        if (mUVCDrawer)
+            mUVCDrawer.StartPreviewAction -= UVCIsReady;
+    }
+    /**
+     * UVC機器とのネゴシエーション時に
+     * H.264を優先してネゴシエーションするかどうか
+     * Android実機のみ有効
+     * true:	H.264 > MJPEG > YUV
+     * false:	MJPEG > H.264 > YUV
+     */
+    public bool PreferH264 = false;
+    private const int FRAME_TYPE_MJPEG = 0x000007;
+    private const int FRAME_TYPE_H264 = 0x000014;
+    void SetResolution(int optionIndex)
+    {
+        _dropdownResolution.SetValueWithoutNotify(optionIndex);
+        switch (optionIndex)
+        {
+            case 0:
+                Resize(1280, 960);
+                break;
+            case 1:
+                Resize(1280, 720);
+                break;
+            case 2:
+                Resize(640, 480);
+                break;
+            case 3:
+                Resize(640, 360);
+                break;
+            case 4:
+                Resize(320, 240);
+                break;
+        }
+    }
+    void Resize(int width,int height) {
+        if (cameraInfo == null) return;
+        int[] frameTypes = {
+                    PreferH264 ? FRAME_TYPE_H264 : FRAME_TYPE_MJPEG,
+                    PreferH264 ? FRAME_TYPE_MJPEG : FRAME_TYPE_H264,
+                };
+        foreach (var frameType in frameTypes)
+        {
+            Debug.Log("Resize frameType:" + frameType + " = " + width + " : "+ height);
+            if (UVCManager.onResize(cameraInfo.device.id, frameType, width, height) == 0)
+            {
+                Debug.Log("frameType:" + frameType);
+                break;
+            }
+        }
+    }
+
+    public void UVCIsReady(Texture texture)
+    {
+        getDevices();
+
+
+        //Dictionary<UInt64, UVCCtrlInfo> keyValuePairs = cameraInfo.getCtrlInfos();
+        //foreach (KeyValuePair<UInt64, UVCCtrlInfo> kvp in keyValuePairs)
+        //{
+        //    Debug.Log($"Key: {kvp.Key}, Value: {kvp.Value}");
+        //}
+
+        List<UInt64> list = cameraInfo.GetCtrls();
+        for (int i = 0; i < list.Count; i++)
+        {
+            int value = cameraInfo.GetValue(list[i]);
+
+            UVCCtrlInfo uVCCtrlInfo = cameraInfo.GetInfo(list[i]);
+
+            Debug.Log(i + "= Ctrls:" + list[i] + ",Value:" + value + ",info:" + uVCCtrlInfo.ToString());
+        }
+
+        //Int32 value = cameraInfo.GetValue(0x00000001);
+        //Debug.Log("Brightness:"+value);
+
+        initSlider();
+    }
+    // Start is called before the first frame update
+    void Start()
+    {
+
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+
+    }
+}

+ 11 - 0
Assets/InfraredProject/UVC4UnityAndroidPlugin/UITest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 433d6f9b925bafd4faef03481b3fc4c7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 30 - 0
Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs

@@ -571,6 +571,36 @@ public partial class ScreenLocate : MonoBehaviour
         Debug.Log("BtnScreenLocate Capture:" + Capture + " ,Delay: " + Delay);
         screenIdentification.LocateScreen(Capture, Delay);
     }
+    /**
+      * 与UVC设备协商时
+      * H.264是否优先协商
+      * 仅安卓实机有效
+      * true:	H.264 > MJPEG > YUV
+      * false:	MJPEG > H.264 > YUV
+      */
+    public bool PreferH264 = false;
+    private const int FRAME_TYPE_MJPEG = 0x000007;
+    private const int FRAME_TYPE_H264 = 0x000014;
+    public  void Resize(int width, int height)
+    {
+        if (mUVCCameraInfo == null) return;
+        
+        bool PreferH264 = mUVCManager.PreferH264;
+        
+        int[] frameTypes = {
+                    PreferH264 ? FRAME_TYPE_H264 : FRAME_TYPE_MJPEG,
+                    PreferH264 ? FRAME_TYPE_MJPEG : FRAME_TYPE_H264,
+                };
+        foreach (var frameType in frameTypes)
+        {
+            Debug.Log("Resize frameType:" + frameType + " = " + width + " : " + height);
+            if (UVCManager.onResize(mUVCCameraInfo.device.id, frameType, width, height) == 0)
+            {
+                Debug.Log("frameType:" + frameType);
+                break;
+            }
+        }
+    }
     #endregion
     public void BtnScreenMap()
     {

+ 1 - 1
ProjectSettings/EditorBuildSettings.asset

@@ -35,7 +35,7 @@ EditorBuildSettings:
   - enabled: 1
     path: Assets/BowArrow/Scenes/GameDouble.unity
     guid: ab9cb5f113d25ed4a9c69a584d2e5c01
-  - enabled: 1
+  - enabled: 0
     path: Assets/InfraredProject/UVC4UnityAndroidPlugin/Samples/Scenes/UVC2DScene.unity
     guid: d9c653ce29884b648bd83d4066fe46c0
   m_configObjects: {}

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно