Bladeren bron

1.调整初始化相机流程

slambb 1 jaar geleden
bovenliggende
commit
f4bc9d6b24

+ 18 - 15
Assets/BowArrow/InfraredCamera/InfraredDemo.cs

@@ -428,17 +428,32 @@ public class InfraredDemo : MonoBehaviour
             {
                 //生成控制摄像机的参数滑条
                 Debug.Log("初始化摄像机!");
-                initSlider(camera);
+                //initSlider(camera);
                 //_cameraRender.texture =  ScreenLocate.Main.getUVCTexture; //infraredCameraHelper.GetCameraTexture(); 
                 //_cameraRender.SetNativeSize();
 
                 //延迟重新设置一次分辨率
-                StartCoroutine(delaySetResolution());
+                StartCoroutine(delayInitOhterInfo(camera));
                
             };
             //InfraredCameraHelper.InfraredCameraHelperRawImageList.Add(_cameraRender);
-
         }
+    }
+    /// <summary>
+    /// 延迟设置分辨率
+    /// </summary>
+    /// <returns></returns>
+    IEnumerator delayInitOhterInfo(UVCManager.CameraInfo camera) {
+
+        yield return new WaitForSeconds(1f);
+
+        initSlider(camera);
+        //按照分辨率重新设置
+        SetResolutionNew((int)resoutionNew.Get());
+        // yield return new WaitForSeconds(1f);
+        //如果本地有记录,初始化一次
+        //initScreenLocateManual();
+
         //参数面板
         SetShakeFilterValue(shakeFilterValue.Get());
         _sliderShakeFilter.onValueChanged.AddListener(SetShakeFilterValue);
@@ -476,18 +491,6 @@ public class InfraredDemo : MonoBehaviour
         _infraredFilter.onValueChanged.AddListener(SetInfraredFilterValue);
 
     }
-    /// <summary>
-    /// 延迟设置分辨率
-    /// </summary>
-    /// <returns></returns>
-    IEnumerator delaySetResolution() {
-        yield return new WaitForSeconds(1f);
-        //按照分辨率重新设置
-        SetResolutionNew((int)resoutionNew.Get());
-       // yield return new WaitForSeconds(1f);
-        //如果本地有记录,初始化一次
-        //initScreenLocateManual();
-    }
 
     /// <summary>
     /// 初始化时候获取设置和存储来控制显示准心

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

@@ -41,6 +41,9 @@ namespace InfraredManager
             //    _screenLocate.mUVCDrawer.RenderTargets.Add(InfraredCameraHelperRawImageList[i].gameObject);
             //}
 
+            //初始化UVCManager
+            _screenLocate.mUVCManager.onStartUVCManager();
+
         }
 
         public void Dispose()

+ 2 - 2
Assets/InfraredProject/Resources/WebCameraView.prefab

@@ -8145,8 +8145,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 1}
   m_AnchorMax: {x: 0.5, y: 1}
-  m_AnchoredPosition: {x: 12.1813, y: -220.99425}
-  m_SizeDelta: {x: 1000, y: 500}
+  m_AnchoredPosition: {x: 321.0616, y: -589.9922}
+  m_SizeDelta: {x: 340.7788, y: 131.002}
   m_Pivot: {x: 0.5, y: 1}
 --- !u!222 &8173640441509690787
 CanvasRenderer:

+ 219 - 0
Assets/InfraredProject/UVC4UnityAndroidPlugin/Samples/Scenes/UVC2DScene.unity

@@ -385,6 +385,140 @@ RectTransform:
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: -20, y: -20}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &223450192
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 223450193}
+  - component: {fileID: 223450196}
+  - component: {fileID: 223450195}
+  - component: {fileID: 223450194}
+  m_Layer: 5
+  m_Name: Button (Legacy) (4)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &223450193
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 223450192}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 3.7134, y: 3.7134, z: 3.7134}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 668773937}
+  m_Father: {fileID: 1180428450}
+  m_RootOrder: 7
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: -88, y: 353}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &223450194
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 223450192}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 223450195}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 1180428451}
+        m_TargetAssemblyTypeName: UITest, Assembly-CSharp
+        m_MethodName: OnInitUVCManager
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!114 &223450195
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 223450192}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &223450196
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 223450192}
+  m_CullTransparentMesh: 1
 --- !u!1 &239522512
 GameObject:
   m_ObjectHideFlags: 0
@@ -1122,6 +1256,86 @@ MonoBehaviour:
     m_PersistentCalls:
       m_Calls: []
   m_IsOn: 1
+--- !u!1 &668773936
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 668773937}
+  - component: {fileID: 668773939}
+  - component: {fileID: 668773938}
+  m_Layer: 5
+  m_Name: Text (Legacy)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &668773937
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 668773936}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 223450193}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &668773938
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 668773936}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: InitUVCManager
+--- !u!222 &668773939
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 668773936}
+  m_CullTransparentMesh: 1
 --- !u!1 &716230181
 GameObject:
   m_ObjectHideFlags: 0
@@ -2146,6 +2360,7 @@ RectTransform:
   - {fileID: 1451311386}
   - {fileID: 2184614}
   - {fileID: 281993271}
+  - {fileID: 223450193}
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -3749,6 +3964,10 @@ PrefabInstance:
       propertyPath: UACEnabled
       value: 1
       objectReference: {fileID: 0}
+    - target: {fileID: 7716261784260357304, guid: fa65cd0b0e2ffad4180eabf8fe755f9a, type: 3}
+      propertyPath: InitUVCEnabled
+      value: 0
+      objectReference: {fileID: 0}
     - target: {fileID: 7716261784260357304, guid: fa65cd0b0e2ffad4180eabf8fe755f9a, type: 3}
       propertyPath: UVCDrawers.Array.size
       value: 0

+ 55 - 5
Assets/InfraredProject/UVC4UnityAndroidPlugin/Scripts/UVCManager.cs

@@ -1,4 +1,5 @@
-//#define ENABLE_LOG
+#define ENABLE_LOG
+#define DEBUG
 /*
  * Copyright (c) 2014 - 2022 t_saki@serenegiant.com 
  */
@@ -770,18 +771,40 @@ namespace Serenegiant.UVC
 		 */
         private Dictionary<Int32, AudioInfo> audioInFos = new Dictionary<int, AudioInfo>();
 
+        #region 额外添加的操作
+        public bool InitUVCEnabled = true;
+        #endregion
+
         //--------------------------------------------------------------------------------
         // UnityEngineからの呼び出し
         //--------------------------------------------------------------------------------
         // Start is called before the first frame update
         IEnumerator Start()
         {
+            if (!InitUVCEnabled) yield break;
+
 #if (!NDEBUG && DEBUG && ENABLE_LOG)
-			Console.WriteLine($"{TAG}Start:");
+            Console.WriteLine($"{TAG}Start:");
 #endif
             mainContext = SynchronizationContext.Current;
             callback = PluginCallbackManager.Add(this);
+            Debug.Log($"{TAG}Start:");
+            yield return Initialize();
 
+
+        }
+
+        /// <summary>
+        /// 调用来初始化
+        /// </summary>
+        /// <returns></returns>
+        public IEnumerator startUVCManager()
+        {
+            yield return new WaitForSeconds(1.0f);
+            Debug.Log("startUVCManager Start:");
+            Debug.Log($"{TAG} startUVCManager Start:");
+            mainContext = SynchronizationContext.Current;
+            callback = PluginCallbackManager.Add(this);
             yield return Initialize();
         }
 
@@ -908,14 +931,40 @@ namespace Serenegiant.UVC
         //			}
         //			return false;
         //		}
+        public void onStartUVCManager()
+        {
+            StartCoroutine(startUVCManager());
+        }
         public void onStartPreview(UVCDevice device)
         {
-            StartPreview(device);
+            // StartPreview(device);
+
+            if (HandleOnAttachEvent(device))
+            {
+                attachedDevices.Add(device);
+                StartPreview(device);
+                if (UACEnabled)
+                {   // UVCManagerのUAC機能が有効な場合
+                    StartAudio(device);
+                }
+            }
         }
 
         public void onStopPreview(UVCDevice device)
         {
-            StopPreview(device);
+            var found = attachedDevices.Find(item =>
+            {
+                return item != null && item.id == device.id;
+            });
+            if (found != null)
+            {
+                HandleOnDetachEvent(found);
+                StopPreview(found);
+                StopAudio(found);
+                RemoveCamera(found);
+                RemoveAudio(found);
+                attachedDevices.Remove(found);
+            }
         }
         private void StartPreview(UVCDevice device)
         {
@@ -1303,7 +1352,6 @@ namespace Serenegiant.UVC
             {
                 yield return AndroidUtils.GrantCameraPermission((string permission, AndroidUtils.PermissionGrantResult result) =>
                 {
-                    Debug.Log($"{TAG}OnPermission:{permission}={result}");
 #if (!NDEBUG && DEBUG && ENABLE_LOG)
 					Console.WriteLine($"{TAG}OnPermission:{permission}={result}");
 #endif
@@ -1317,9 +1365,11 @@ namespace Serenegiant.UVC
                             {
                                 // パーミッションを取得できなかった
                                 // FIXME 説明用のダイアログ等を表示しないといけない
+                                Debug.LogWarning($"{TAG}OnPermission:PERMISSION_DENY,没有办法获取权限");
                             }
                             break;
                         case AndroidUtils.PermissionGrantResult.PERMISSION_DENY_AND_NEVER_ASK_AGAIN:
+                            Debug.Log($"{TAG} 2222222222222222222222222222");
                             break;
                     }
                 });

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

@@ -180,6 +180,10 @@ public class UITest : MonoBehaviour
         if (mUVCDrawer)
             mUVCDrawer.StartPreviewAction -= UVCIsReady;
     }
+    public void OnInitUVCManager()
+    {
+        mUVCManager.onStartUVCManager();
+    }
 
     public void onStartView() {
         mUVCManager.onStartPreview(cameraInfo.device);

+ 38 - 14
Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs

@@ -355,11 +355,18 @@ public partial class ScreenLocate : MonoBehaviour
         {
             quadUnityVectorList = screenIdentification.Screen.QuadInCamera.GetUnityVertexList();
 
-            SaveScreenLocateVectorList();
-            SyncInfraredDemo();
-            SyncInfraredScreenPositioningView();
-            Debug.Log("[ScreenLocate] RefreshCameraSize 屏幕size改变:[" + (int)getUVCCameraInfoSize.x + "," + (int)getUVCCameraInfoSize.y + "]");
-            Debug.Log("[ScreenLocate] RefreshCameraSize 屏幕size改变,刷新quadUnityVectorList:" + PrintVector2List(quadUnityVectorList));
+            if (!ContainsNaN(quadUnityVectorList))
+            {
+                SaveScreenLocateVectorList();
+                SyncInfraredDemo();
+                SyncInfraredScreenPositioningView();
+                Debug.Log("[ScreenLocate] RefreshCameraSize 屏幕size改变:[" + (int)getUVCCameraInfoSize.x + "," + (int)getUVCCameraInfoSize.y + "]");
+                Debug.Log("[ScreenLocate] RefreshCameraSize 屏幕size改变,刷新quadUnityVectorList:" + PrintVector2List(quadUnityVectorList));
+            }
+            else {
+                Debug.LogError("[ScreenLocate] RefreshCameraSize 屏幕size改变,存在NaN值,重新校准:" + PrintVector2List(quadUnityVectorList));
+            }
+         
 
             if (DebugOnEditorWin)
                 Main.ShowScreen(Main.ScreenQuad, screenIdentification.Screen.QuadInCamera);
@@ -777,7 +784,22 @@ public partial class ScreenLocate : MonoBehaviour
         //Debug.Log(result);
         return result;
     }
-
+    /// <summary>
+    /// 判断是否存在NaN
+    /// </summary>
+    /// <param name="vectors"></param>
+    /// <returns></returns>
+    public bool ContainsNaN(List<Vector2> vectors)
+    {
+        foreach (var v in vectors)
+        {
+            if (float.IsNaN(v.x) || float.IsNaN(v.y))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
     // 标记屏幕的四个角, ScreenQuadObject 下挂了4个子节点用于标记
     public void ShowScreen(RectTransform ScreenQuadObject, QuadrilateralInCamera screen)
     {
@@ -791,8 +813,6 @@ public partial class ScreenLocate : MonoBehaviour
         if (ScreenQuadObject && ScreenQuadObject.childCount >= 4)
         {
             ScreenQuadObject.gameObject.SetActive(true);
-            //quadUnityVectorList.Clear();
-
             for (int i = 0; i < 4; i++)
             {
                 if (DebugOnEditorWin)
@@ -800,18 +820,21 @@ public partial class ScreenLocate : MonoBehaviour
                     RectTransform t = ScreenQuadObject.GetChild(i) as RectTransform;
                     t.anchoredPosition = screen.Quad[i].pixelToLocalPosition_AnchorCenter(screen.CameraSize, ScreenQuadObject.rect);
                 }
-                //mUVCCameraInfo.Size
-                //自动识别时候,记录四个点
-                //quadUnityVectorList.Add(quad[i].UnityVector());
             }
-
-            quadUnityVectorList = screen.GetUnityVertexList();      // 记录四个点
-
+        }
+        quadUnityVectorList = screen.GetUnityVertexList();      // 记录四个点
+        if (!ContainsNaN(quadUnityVectorList))
+        {
             SaveScreenLocateVectorList();
             SyncInfraredDemo();
             SyncInfraredScreenPositioningView();
             Debug.Log("[ScreenLocate] ShowScreen 已识别到屏幕,更新quadUnityVectorList:" + PrintVector2List(quadUnityVectorList));
         }
+        else
+        {
+            Debug.LogError("[ScreenLocate] RefreshCameraSize 屏幕size改变,存在NaN值,重新校准:" + PrintVector2List(quadUnityVectorList));
+        }
+
     }
     public void ShowScreen(QuadrilateralInCamera screen) => ShowScreen(ScreenQuad, screen);
 
@@ -831,6 +854,7 @@ public partial class ScreenLocate : MonoBehaviour
     static public bool GetScreenLocateVectorList()
     {
         string posListStr = PlayerPrefs.GetString("ScreenLocateVectorList", "");
+        Debug.Log("GetScreenLocateVectorList:"+ posListStr);
         if (!string.IsNullOrWhiteSpace(posListStr))
         {
             quadUnityVectorList.Clear();