public void Start() { Application.runInBackground = true; if (_shaderGammaConversion == null) { _shaderGammaConversion = Shader.Find("Hidden/AVProLiveCamera/IMGUI"); } if (_shaderGammaConversionTransparent == null) { _shaderGammaConversionTransparent = Shader.Find("Hidden/AVProLiveCamera/IMGUI Transparent"); } EnumerateDevices(); int numDevices = AVProLiveCameraManager.Instance.NumDevices; for (int i = 0; i < numDevices; i++) { AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(i); // Optionally update various camera internals, depending on which features are required device.UpdateHotSwap = AVProLiveCameraManager.Instance._supportHotSwapping; device.UpdateFrameRates = true; device.UpdateSettings = _updateDeviceSettings; } }
private void EnumDevices() { ClearDevices(); _devices = new List <AVProLiveCameraDevice>(8); int numDevices = AVProLiveCameraPlugin.GetNumDevices(); for (int i = 0; i < numDevices; i++) { string deviceName; if (!AVProLiveCameraPlugin.GetDeviceName(i, out deviceName)) { continue; } string deviceGUID; if (!AVProLiveCameraPlugin.GetDeviceGUID(i, out deviceGUID)) { continue; } int numModes = AVProLiveCameraPlugin.GetNumModes(i); if (numModes > 0) { AVProLiveCameraDevice device = new AVProLiveCameraDevice(deviceName.ToString(), deviceGUID.ToString(), i); _devices.Add(device); } } }
public void Update() { UpdateMaterials(); // Handle mouse click to unzoom if (_zoomedTexture != null) { if (_zoomUp) { if (Input.GetMouseButtonDown(0) && _zoomTimer > 0.1f) // Add a threshold here so the OnGUI mouse event doesn't conflict with this one { _zoomUp = false; } else { _zoomTimer = Mathf.Min(ZoomTime, _zoomTimer + Time.deltaTime); } } else { if (_zoomTimer <= 0.0f) { _zoomedTexture = null; _zoomedDevice = null; } _zoomTimer = Mathf.Max(0f, _zoomTimer - Time.deltaTime); } } }
public override void OnInspectorGUI() { _manager = (this.target) as AVProLiveCameraManager; if (!Application.isPlaying) { DrawDefaultInspector(); } else { EditorGUILayout.Space(); int numDevices = _manager.NumDevices; EditorGUILayout.PrefixLabel("Devices: "); for (int deviceIndex = 0; deviceIndex < numDevices; deviceIndex++) { EditorGUILayout.BeginHorizontal(); AVProLiveCameraDevice device = _manager.GetDevice(deviceIndex); EditorGUILayout.LabelField(deviceIndex.ToString() + ") " + device.Name, ""); if (device.IsRunning) { EditorGUILayout.LabelField("Display at " + device.DisplayFPS.ToString("F1") + " FPS", ""); } else { EditorGUILayout.LabelField("Stopped", ""); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.Space(); } }
private AVProLiveCameraDevice SelectDevice() { AVProLiveCameraDevice result = null; switch (_deviceSelection) { default: case SelectDeviceBy.Default: result = AVProLiveCameraManager.Instance.GetDevice(0); break; case SelectDeviceBy.Name: if (_desiredDeviceNames.Count > 0) { result = GetFirstDevice(_desiredDeviceNames); } break; case SelectDeviceBy.Index: if (_desiredDeviceIndex >= 0) { result = AVProLiveCameraManager.Instance.GetDevice(_desiredDeviceIndex); } break; } return(result); }
void Reset() { _videoInput = -1; _mode = null; _device = null; _flipX = _flipY = false; _deviceSelection = SelectDeviceBy.Default; _modeSelection = SelectModeBy.Default; _videoInputSelection = SelectDeviceBy.Default; _desiredDeviceNames = new List <string>(4); _desiredResolutions = new List <Vector2>(2); _desiredVideoInputs = new List <AVProLiveCameraPlugin.VideoInput>(4); _desiredDeviceNames.Add("Logitech HD Pro Webcam C920"); _desiredDeviceNames.Add("Decklink Video Capture"); _desiredDeviceNames.Add("Logitech Webcam Pro 9000"); _desiredResolutions.Add(new Vector2(1920, 1080)); _desiredResolutions.Add(new Vector2(1280, 720)); _desiredResolutions.Add(new Vector2(640, 360)); _desiredResolutions.Add(new Vector2(640, 480)); _desiredVideoInputs.Add(AVProLiveCameraPlugin.VideoInput.Video_Serial_Digital); _desiredVideoInputs.Add(AVProLiveCameraPlugin.VideoInput.Video_SVideo); _desiredVideoInputIndex = 0; _maintainAspectRatio = false; _desiredModeIndex = -1; _desiredDeviceIndex = 0; }
void Update() { if (_camera != null) { _device = _camera.Device; } if (_device != null && _device.IsActive && !_device.IsPaused) { if (_device.CurrentWidth > _frameWidth || _device.CurrentHeight > _frameHeight) { CreateBuffer(_device.CurrentWidth, _device.CurrentHeight); } uint lastFrame = AVProLiveCameraPlugin.GetLastFrame(_device.DeviceIndex); if (lastFrame != _lastFrame) { _lastFrame = lastFrame; bool result = AVProLiveCameraPlugin.GetFrameAsColor32(_device.DeviceIndex, _framePointer, _frameWidth, _frameHeight); if (result) { #if TEXTURETEST _testTexture.SetPixels32(_frameData); _testTexture.Apply(false, false); #endif } } } }
void Update() { if (_camera != null) _device = _camera.Device; if (_device != null && _device.IsActive && !_device.IsPaused) { if (_device.CurrentWidth > _frameWidth || _device.CurrentHeight > _frameHeight) { CreateBuffer(_device.CurrentWidth, _device.CurrentHeight); } uint lastFrame = AVProLiveCameraPlugin.GetLastFrame(_device.DeviceIndex); if (lastFrame != _lastFrame) { _lastFrame = lastFrame; bool result = AVProLiveCameraPlugin.GetFrameAsColor32(_device.DeviceIndex, _framePointer, _frameWidth, _frameHeight); if (result) { #if TEXTURETEST _testTexture.SetPixels32(_frameData); _testTexture.Apply(false, false); #endif } } } }
public void OnDestroy() { if (_device != null) { _device.Close(); } _device = null; }
private void EnumerateDevices() { // Enumerate all cameras int numDevices = AVProLiveCameraManager.Instance.NumDevices; print("num devices: " + numDevices); for (int i = 0; i < numDevices; i++) { AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(i); // Enumerate video inputs (only for devices with multiple analog input sources, eg TV cards) print("device " + i + ": " + device.Name + " (" + device.GUID + ") has " + device.NumVideoInputs + " videoInputs"); for (int j = 0; j < device.NumVideoInputs; j++) { print(" videoInput " + j + ": " + device.GetVideoInputName(j)); } // Enumerate camera modes print("device " + i + ": " + device.Name + " (" + device.GUID + ") has " + device.NumModes + " modes"); for (int j = 0; j < device.NumModes; j++) { AVProLiveCameraDeviceMode mode = device.GetMode(j); print(" mode " + j + ": " + mode.Width + "x" + mode.Height + " @" + mode.FPS.ToString("F2") + "fps [" + mode.Format + "]"); } // Enumerate camera settings print("device " + i + ": " + device.Name + " (" + device.GUID + ") has " + device.NumSettings + " video settings"); for (int j = 0; j < device.NumSettings; j++) { AVProLiveCameraSettingBase settingBase = device.GetVideoSettingByIndex(j); switch (settingBase.DataTypeValue) { case AVProLiveCameraSettingBase.DataType.Boolean: { AVProLiveCameraSettingBoolean settingBool = (AVProLiveCameraSettingBoolean)settingBase; print(string.Format(" setting {0}: {1}({2}) value:{3} default:{4} canAuto:{5} isAuto:{6}", j, settingBase.Name, settingBase.PropertyIndex, settingBool.CurrentValue, settingBool.DefaultValue, settingBase.CanAutomatic, settingBase.IsAutomatic)); } break; case AVProLiveCameraSettingBase.DataType.Float: { AVProLiveCameraSettingFloat settingFloat = (AVProLiveCameraSettingFloat)settingBase; print(string.Format(" setting {0}: {1}({2}) value:{3} default:{4} range:{5}-{6} canAuto:{7} isAuto:{8}", j, settingBase.Name, settingBase.PropertyIndex, settingFloat.CurrentValue, settingFloat.DefaultValue, settingFloat.MinValue, settingFloat.MaxValue, settingBase.CanAutomatic, settingBase.IsAutomatic)); } break; } } _instances.Add(new UIData() { scrollPos = Vector2.zero, scrollVideoInputPos = Vector2.zero, showSettings = false, showModes = false, material = null }); } }
private void UpdateMaterials() { for (int i = 0; i < _instances.Count; i++) { AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(i); UIData uidata = _instances[i]; uidata.material = UpdateMaterial(device, uidata.material); } }
public AVProLiveCameraDeviceMode(AVProLiveCameraDevice device, int index, int width, int height, float fps, string format) { _device = device; _modeIndex = index; _width = width; _height = height; _fps = fps; _format = format; }
public AVProLiveCameraDeviceMode(AVProLiveCameraDevice device, int index, int width, int height, float fps, string format) { _device = device; _modeIndex = index; _width = width; _height = height; _fps = fps; _format = format; }
public AVProLiveCameraDevice GetDevice(int index) { AVProLiveCameraDevice result = null; if (index >= 0 && index < _devices.Count) { result = _devices[index]; } return(result); }
private void UpdateCameras() { // Update all cameras int numDevices = AVProLiveCameraManager.Instance.NumDevices; for (int i = 0; i < numDevices; i++) { AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(i); // Update the actual image device.Update(false); } }
private static AVProLiveCameraDeviceMode GetClosestMode(AVProLiveCameraDevice device, List <Vector2> resolutions, bool maintainApectRatio) { AVProLiveCameraDeviceMode result = null; for (int i = 0; i < resolutions.Count; i++) { result = device.GetClosestMode(Mathf.FloorToInt(resolutions[i].x), Mathf.FloorToInt(resolutions[i].y), maintainApectRatio); if (result != null) { break; } } return(result); }
private static AVProLiveCameraDevice GetFirstDevice(List <string> names) { AVProLiveCameraDevice result = null; for (int i = 0; i < names.Count; i++) { result = AVProLiveCameraManager.Instance.GetDevice(names[i]); if (result != null) { break; } } return(result); }
private AVProLiveCameraDevice FindDeviceWithGUID(string guid) { AVProLiveCameraDevice result = null; foreach (AVProLiveCameraDevice device in _devices) { if (device.GUID == guid) { result = device; break; } } return(result); }
// Update is called once per frame /* private void Update(){ * deviceL = AVProLiveCameraManager.Instance.GetDevice(deviceNameL); * // deviceR = AVProLiveCameraManager.Instance.GetDevice(deviceNameR); * deviceL.Update(false); * // deviceR.Update(false); * mrL.material.mainTexture = AVProLiveCameraManager.Instance.GetDevice(deviceNameL).OutputTexture; * // mrR.material.mainTexture = AVProLiveCameraManager.Instance.GetDevice(deviceNameR).OutputTexture; * * RenderTexture.active = (RenderTexture)mrL.material.mainTexture; * texL.ReadPixels (new UnityEngine.Rect(0, 0, FRAME_WIDTH, FRAME_HEIGHT), 0, 0); * oriImageL = Texture2dToImage<Bgr, byte> (texL, true); * * * //RenderTexture.active = (RenderTexture)mrR.material.mainTexture; * //texR.ReadPixels (new UnityEngine.Rect(0, 0, FRAME_WIDTH, FRAME_HEIGHT), 0, 0); * //oriImageR = Texture2dToImage<Bgr, byte> (texR, true); * * * CvInvoke.Undistort (oriImageL, resImageL, Camera_Matrix, Distortion_Coefficients); * // CvInvoke.Undistort (oriImageR, resImageR, Camera_Matrix, Distortion_Coefficients); * CvInvoke.Imshow("Left image", resImageL); //Show the image * // CvInvoke.Imshow("Right image", resImageR); //Show the image * }*/ private void UpdateCameraL() { while (true) { Debug.Log("KAD"); deviceL = AVProLiveCameraManager.Instance.GetDevice(deviceNameL); deviceL.Update(false); mrL.material.mainTexture = AVProLiveCameraManager.Instance.GetDevice(deviceNameL).OutputTexture; RenderTexture.active = (RenderTexture)mrL.material.mainTexture; texL.ReadPixels(new UnityEngine.Rect(0, 0, FRAME_WIDTH, FRAME_HEIGHT), 0, 0); oriImageL = Texture2dToImage <Bgr, byte> (texL, true); CvInvoke.Undistort(oriImageL, resImageL, Camera_Matrix, Distortion_Coefficients); CvInvoke.Imshow("Left image", resImageL); //Show the image } }
public AVProLiveCameraDevice GetDevice(string name) { AVProLiveCameraDevice result = null; int numDevices = NumDevices; for (int i = 0; i < numDevices; i++) { AVProLiveCameraDevice device = GetDevice(i); if (device.Name == name) { result = device; break; } } return(result); }
public void SelectDeviceAndMode() { _device = null; _mode = null; _videoInput = -1; _device = SelectDevice(); if (_device != null) { _mode = SelectMode(); _videoInput = SelectVideoInputIndex(); } else { Debug.LogWarning("[AVPro Live Camera] Could not find the device."); } }
public void Begin() { SelectDeviceAndMode(); if (_device != null) { _device.Deinterlace = _deinterlace; if (!_device.Start(_mode, _videoInput)) { Debug.LogWarning("[AVPro Live Camera] Device failed to start."); _device.Close(); _device = null; _mode = null; _videoInput = -1; } } }
private static Shader GetRequiredShader(AVProLiveCameraDevice device) { Shader result = null; if (QualitySettings.activeColorSpace == ColorSpace.Linear) { if (device != null && device.SupportsTransparency) { result = _shaderGammaConversionTransparent; } else { result = _shaderGammaConversion; } } return(result); }
public void Start() { Application.runInBackground = true; EnumerateDevices(); int numDevices = AVProLiveCameraManager.Instance.NumDevices; for (int i = 0; i < numDevices; i++) { AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(i); // Optionally update various camera internals, depending on which features are required device.UpdateHotSwap = AVProLiveCameraManager.Instance._supportHotSwapping; device.UpdateFrameRates = true; device.UpdateSettings = _updateDeviceSettings; } }
private static Material UpdateMaterial(AVProLiveCameraDevice device, Material material) { // Get required shader Shader currentShader = null; if (material != null) { currentShader = material.shader; } Shader nextShader = GetRequiredShader(device); // If the shader requirement has changed if (currentShader != nextShader) { // Destroy existing material if (material != null) { #if UNITY_EDITOR Material.DestroyImmediate(material); #else Material.Destroy(material); #endif material = null; } // Create new material if (nextShader != null) { material = new Material(nextShader); if (material.HasProperty(_propApplyGamma)) { if (QualitySettings.activeColorSpace == ColorSpace.Linear) { material.EnableKeyword("APPLY_GAMMA"); } else { material.DisableKeyword("APPLY_GAMMA"); } } } } return(material); }
private void UpdateCameras() { // Update all cameras /*int numDevices = AVProLiveCameraManager.Instance.NumDevices; * //Debug.Log (numDevices); * for (int i = 0; i < numDevices; i++) * { * AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(i); * * // Update the actual image * device.Update(false); * }*/ AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(deviceName); device.Update(false); mr.material.mainTexture = AVProLiveCameraManager.Instance.GetDevice(deviceName).OutputTexture; }
private void UpdateCameras() { device = AVProLiveCameraManager.Instance.GetDevice(deviceName); device.Update(false); mr.material.mainTexture = AVProLiveCameraManager.Instance.GetDevice(deviceName).OutputTexture; was = RenderTexture.active; RenderTexture.active = (RenderTexture)mr.material.mainTexture; tex.ReadPixels(new UnityEngine.Rect(0, 0, FRAME_WIDTH, FRAME_HEIGHT), 0, 0); tex.Apply(); RenderTexture.active = was; /* oriImage = Texture2dToMat (tex);*/ oriImage = Texture2dToImage <Bgr, byte> (tex, true); CvInvoke.Undistort(oriImage, resImage, Camera_Matrix, Distortion_Coefficients); // mr.material.mainTexture = (Texture)ImageToTexture2D(resImage, true); Image <Hsv, Byte> hsv_image = resImage.Convert <Hsv, Byte>(); // Change the HSV value here Hsv hsvmin = new Hsv(H_MIN, S_MIN, V_MIN); Hsv hsvmax = new Hsv(H_MAX, S_MAX, V_MAX); hsv_image = hsv_image.SmoothGaussian(5, 5, 0.1, 0.1); Image <Gray, byte> red_object = hsv_image.InRange(hsvmin, hsvmax); red_object = red_object.Erode(1); red_object = red_object.Dilate(1); CvInvoke.FindNonZero(red_object, nonZeroCoordinates); avgPixelIntensity = CvInvoke.Mean(nonZeroCoordinates); // Debug.Log (avgPixelIntensity.V1); CvInvoke.Imshow("Left image", red_object); //Show the image // CvInvoke.WaitKey(30); diff = 0; if (nonZeroCoordinates.Rows > 1000) { diff = (int)(avgPixelIntensity.V1 - (double)(FRAME_HEIGHT / 2)); //ArduinoSerialHandlerLeft.value0 = diff; } }
private void UpdateCameras() { { #if UNITY_5_4_OR_NEWER || (UNITY_5 && !UNITY_5_0 && !UNITY_5_1) GL.IssuePluginEvent(AVProLiveCameraPlugin.GetRenderEventFunc(), AVProLiveCameraPlugin.PluginID | (int)AVProLiveCameraPlugin.PluginEvent.UpdateAllTextures); #else GL.IssuePluginEvent(AVProLiveCameraPlugin.PluginID | (int)AVProLiveCameraPlugin.PluginEvent.UpdateAllTextures); #endif } // Update all cameras int numDevices = AVProLiveCameraManager.Instance.NumDevices; for (int i = 0; i < numDevices; i++) { AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(i); // Update the actual image device.Update(false); device.Render(); } }
private void AddNewDevices() { bool isDeviceAdded = false; int numDevices = AVProLiveCameraPlugin.GetNumDevices(); for (int i = 0; i < numDevices; i++) { string deviceGUID; if (!AVProLiveCameraPlugin.GetDeviceGUID(i, out deviceGUID)) { continue; } AVProLiveCameraDevice device = FindDeviceWithGUID(deviceGUID); if (device == null) { string deviceName; if (!AVProLiveCameraPlugin.GetDeviceName(i, out deviceName)) { continue; } int numModes = AVProLiveCameraPlugin.GetNumModes(i); if (numModes > 0) { device = new AVProLiveCameraDevice(deviceName.ToString(), deviceGUID.ToString(), i); _devices.Add(device); isDeviceAdded = true; } } } if (isDeviceAdded) { this.SendMessage("NewDeviceAdded", null, SendMessageOptions.DontRequireReceiver); } }
void Reset() { _videoInput = -1; _mode = null; _device = null; _flipX = _flipY = false; _deviceSelection = SelectDeviceBy.Default; _modeSelection = SelectModeBy.Default; _videoInputSelection = SelectDeviceBy.Default; _desiredDeviceNames = new List<string>(4); _desiredResolutions = new List<Vector2>(2); _desiredVideoInputs = new List<AVProLiveCameraPlugin.VideoInput>(4); _desiredDeviceNames.Add("Logitech HD Pro Webcam C920"); _desiredDeviceNames.Add("Decklink Video Capture"); _desiredDeviceNames.Add("Logitech Webcam Pro 9000"); _desiredResolutions.Add(new Vector2(1920, 1080)); _desiredResolutions.Add(new Vector2(1280, 720)); _desiredResolutions.Add(new Vector2(640, 360)); _desiredResolutions.Add(new Vector2(640, 480)); _desiredVideoInputs.Add(AVProLiveCameraPlugin.VideoInput.Video_Serial_Digital); _desiredVideoInputs.Add(AVProLiveCameraPlugin.VideoInput.Video_SVideo); _desiredVideoInputIndex = 0; _maintainAspectRatio = false; _desiredModeIndex = -1; _desiredDeviceIndex = 0; }
private void EnumDevices() { ClearDevices(); _devices = new List<AVProLiveCameraDevice>(8); int numDevices = AVProLiveCameraPlugin.GetNumDevices(); for (int i = 0; i < numDevices; i++) { string deviceName; if (!AVProLiveCameraPlugin.GetDeviceName(i, out deviceName)) continue; string deviceGUID; if (!AVProLiveCameraPlugin.GetDeviceGUID(i, out deviceGUID)) continue; int numModes = AVProLiveCameraPlugin.GetNumModes(i); if (numModes > 0) { AVProLiveCameraDevice device = new AVProLiveCameraDevice(deviceName.ToString(), deviceGUID.ToString(), i); _devices.Add(device); } } }
public override void OnInspectorGUI() { if (_camera == null) { return; } serializedObject.Update(); if (!Application.isPlaying) { GUILayout.Label("Search for Capture Device:"); EditorGUILayout.Space(); GUILayout.BeginVertical(); SerializedProperty propDeviceSelection = serializedObject.FindProperty("_deviceSelection"); EditorGUILayout.PropertyField(propDeviceSelection, new GUIContent("Device Select By")); AVProLiveCamera.SelectDeviceBy newDeviceSelection = _camera._deviceSelection; switch (newDeviceSelection) { case AVProLiveCamera.SelectDeviceBy.Default: break; case AVProLiveCamera.SelectDeviceBy.Name: if (_camera._deviceSelection != newDeviceSelection && _camera._desiredDeviceNames.Count == 0) { serializedObject.FindProperty("_desiredDeviceNames").arraySize++; serializedObject.ApplyModifiedProperties(); serializedObject.FindProperty("_desiredDeviceNames").GetArrayElementAtIndex(0).stringValue = "Enter Device Name"; serializedObject.ApplyModifiedProperties(); } EditorGUILayout.BeginVertical(); for (int index = 0; index < _camera._desiredDeviceNames.Count; index++) { EditorGUILayout.BeginHorizontal(); /*EditorGUILayout.BeginHorizontal(GUILayout.Width(96)); * if (index != 0) * { * if (GUILayout.Button("Up")) * { * string temp = _camera._desiredDeviceNames[index - 1]; * _camera._desiredDeviceNames[index - 1] = _camera._desiredDeviceNames[index]; * _camera._desiredDeviceNames[index] = temp; * HandleUtility.Repaint(); * } * } * if (index + 1 < _camera._desiredDeviceNames.Count) * { * if (GUILayout.Button("Down")) * { * string temp = _camera._desiredDeviceNames[index + 1]; * _camera._desiredDeviceNames[index + 1] = _camera._desiredDeviceNames[index]; * _camera._desiredDeviceNames[index] = temp; * HandleUtility.Repaint(); * } * } * EditorGUILayout.EndHorizontal();*/ if (GUILayout.Button("-")) { serializedObject.FindProperty("_desiredDeviceNames").DeleteArrayElementAtIndex(index); break; } else { SerializedProperty propDesiredDeviceName = serializedObject.FindProperty("_desiredDeviceNames").GetArrayElementAtIndex(index); EditorGUILayout.PropertyField(propDesiredDeviceName, new GUIContent(""), GUILayout.ExpandWidth(true)); } EditorGUILayout.EndHorizontal(); } if (GUILayout.Button("+")) { serializedObject.FindProperty("_desiredDeviceNames").arraySize++; this.Repaint(); } EditorGUILayout.EndVertical(); break; case AVProLiveCamera.SelectDeviceBy.Index: { SerializedProperty propDesiredDeviceIndex = serializedObject.FindProperty("_desiredDeviceIndex"); EditorGUILayout.PropertyField(propDesiredDeviceIndex, new GUIContent(" ")); } break; } GUILayout.EndVertical(); EditorGUILayout.Space(); GUILayout.BeginVertical(); SerializedProperty propModeSelection = serializedObject.FindProperty("_modeSelection"); EditorGUILayout.PropertyField(propModeSelection, new GUIContent("Mode Select By")); AVProLiveCamera.SelectModeBy newResolutionSelection = _camera._modeSelection; switch (newResolutionSelection) { case AVProLiveCamera.SelectModeBy.Default: break; case AVProLiveCamera.SelectModeBy.Resolution: if (_camera._modeSelection != newResolutionSelection && _camera._desiredResolutions.Count == 0) { serializedObject.FindProperty("_desiredResolutions").arraySize++; } EditorGUILayout.BeginVertical(); SerializedProperty propMaintainAspect = serializedObject.FindProperty("_maintainAspectRatio"); EditorGUILayout.PropertyField(propMaintainAspect); for (int index = 0; index < _camera._desiredResolutions.Count; index++) { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("-")) { serializedObject.FindProperty("_desiredResolutions").DeleteArrayElementAtIndex(index); break; } else { SerializedProperty propResX = serializedObject.FindProperty("_desiredResolutions").GetArrayElementAtIndex(index).FindPropertyRelative("x"); EditorGUILayout.PropertyField(propResX, new GUIContent(""), GUILayout.Width(64f)); EditorGUILayout.LabelField("x", "", GUILayout.Width(24)); SerializedProperty propResY = serializedObject.FindProperty("_desiredResolutions").GetArrayElementAtIndex(index).FindPropertyRelative("y"); EditorGUILayout.PropertyField(propResY, new GUIContent(""), GUILayout.Width(64f)); } EditorGUILayout.EndHorizontal(); } if (GUILayout.Button("+")) { serializedObject.FindProperty("_desiredResolutions").arraySize++; this.Repaint(); } EditorGUILayout.EndVertical(); break; case AVProLiveCamera.SelectModeBy.Index: { SerializedProperty propDesiredModeIndex = serializedObject.FindProperty("_desiredModeIndex"); EditorGUILayout.PropertyField(propDesiredModeIndex, new GUIContent(" ")); } break; } GUILayout.EndVertical(); EditorGUILayout.Space(); GUILayout.BeginVertical(); SerializedProperty propInputSelection = serializedObject.FindProperty("_videoInputSelection"); EditorGUILayout.PropertyField(propInputSelection, new GUIContent("Video Input Select By")); AVProLiveCamera.SelectDeviceBy newVideoInputSelection = _camera._videoInputSelection; switch (newVideoInputSelection) { case AVProLiveCamera.SelectDeviceBy.Default: break; case AVProLiveCamera.SelectDeviceBy.Name: if (_camera._videoInputSelection != newVideoInputSelection && _camera._desiredVideoInputs.Count == 0) { _camera._desiredVideoInputs.Add(AVProLiveCameraPlugin.VideoInput.Video_Serial_Digital); } EditorGUILayout.BeginVertical(); for (int index = 0; index < _camera._desiredVideoInputs.Count; index++) { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("-")) { serializedObject.FindProperty("_desiredVideoInputs").DeleteArrayElementAtIndex(index); break; } else { SerializedProperty propDesiredVideoInput = serializedObject.FindProperty("_desiredVideoInputs").GetArrayElementAtIndex(index); EditorGUILayout.PropertyField(propDesiredVideoInput, new GUIContent(" ")); } EditorGUILayout.EndHorizontal(); } if (GUILayout.Button("+")) { serializedObject.FindProperty("_desiredVideoInputs").arraySize++; this.Repaint(); } EditorGUILayout.EndVertical(); break; case AVProLiveCamera.SelectDeviceBy.Index: { SerializedProperty propDesiredVideoInputIndex = serializedObject.FindProperty("_desiredVideoInputIndex"); EditorGUILayout.PropertyField(propDesiredVideoInputIndex, new GUIContent(" ")); } break; } GUILayout.EndVertical(); EditorGUILayout.Space(); SerializedProperty propPlayOnStart = serializedObject.FindProperty("_playOnStart"); EditorGUILayout.PropertyField(propPlayOnStart); SerializedProperty propDeinterlace = serializedObject.FindProperty("_deinterlace"); EditorGUILayout.PropertyField(propDeinterlace); } else { if (_camera.Device != null) { _preview = GUILayout.Toggle(_preview, "Inspector Preview"); AVProLiveCameraDevice device = _camera.Device; if (_preview && device.OutputTexture != null) { Rect textureRect = GUILayoutUtility.GetRect(64.0f, 64.0f, GUILayout.MinWidth(64.0f), GUILayout.MinHeight(64.0f)); GUI.DrawTexture(textureRect, device.OutputTexture, ScaleMode.ScaleToFit, false); } GUILayout.Label("Device: " + device.Name); GUILayout.Label(string.Format("Mode: {0}x{1} {2}", device.CurrentWidth, device.CurrentHeight, device.CurrentFormat)); if (device.FramesTotal > 30) { GUILayout.Label("Displaying at " + device.DisplayFPS.ToString("F1") + " fps"); } else { GUILayout.Label("Displaying at ... fps"); } if (device.IsRunning) { GUILayout.BeginHorizontal(); if (GUILayout.Button("Stop Camera")) { device.Close(); } if (device.IsPaused) { if (GUILayout.Button("Unpause Stream")) { device.Play(); } } else { if (GUILayout.Button("Pause Stream")) { device.Pause(); } } GUILayout.EndHorizontal(); } else { if (GUILayout.Button("Start Camera")) { _camera.Begin(); } } GUI.enabled = device.CanShowConfigWindow(); if (GUILayout.Button("Show Config Window")) { device.ShowConfigWindow(); } GUI.enabled = true; _showSettings = GUILayout.Toggle(_showSettings, "Show Settings"); if (_showSettings && device.NumSettings > 0) { EditorGUILayout.PrefixLabel("Device Settings", EditorStyles.boldLabel); EditorGUI.BeginChangeCheck(); for (int j = 0; j < device.NumSettings; j++) { AVProLiveCameraSettingBase settingBase = device.GetVideoSettingByIndex(j); GUILayout.BeginHorizontal(); GUI.enabled = !settingBase.IsAutomatic; if (GUILayout.Button("D", GUILayout.ExpandWidth(false))) { settingBase.SetDefault(); } GUI.enabled = true; GUILayout.Label(settingBase.Name, GUILayout.ExpandWidth(false), GUILayout.MaxWidth(96.0f)); GUI.enabled = !settingBase.IsAutomatic; switch (settingBase.DataTypeValue) { case AVProLiveCameraSettingBase.DataType.Boolean: AVProLiveCameraSettingBoolean settingBool = (AVProLiveCameraSettingBoolean)settingBase; settingBool.CurrentValue = GUILayout.Toggle(settingBool.CurrentValue, "", GUILayout.ExpandWidth(true)); break; case AVProLiveCameraSettingBase.DataType.Float: AVProLiveCameraSettingFloat settingFloat = (AVProLiveCameraSettingFloat)settingBase; float sliderValue = GUILayout.HorizontalSlider(settingFloat.CurrentValue, settingFloat.MinValue, settingFloat.MaxValue, GUILayout.ExpandWidth(true)); if (GUI.enabled) { settingFloat.CurrentValue = sliderValue; } GUILayout.Label(((long)settingFloat.CurrentValue).ToString(), GUILayout.Width(32.0f), GUILayout.ExpandWidth(false)); GUI.enabled = settingBase.CanAutomatic; settingBase.IsAutomatic = GUILayout.Toggle(settingBase.IsAutomatic, "", GUILayout.Width(32.0f)); GUI.enabled = true; break; } GUI.enabled = true; GUILayout.EndHorizontal(); } if (GUILayout.Button("Defaults")) { for (int j = 0; j < device.NumSettings; j++) { AVProLiveCameraSettingBase settingBase = device.GetVideoSettingByIndex(j); settingBase.SetDefault(); } } if (EditorGUI.EndChangeCheck() || (Time.frameCount % 30) == 0) { // This is an expensive function call so we want to limit it device.Update_Settings(); } } //EditorGUILayout.Toggle("Running:", device.IsRunning); } #if !AVPROLIVECAMERA_UNITYFEATURE_EDITORAUTOREFRESH if (_preview) { //HandleUtility.Repaint(); this.Repaint(); } #endif } GUI.enabled = true; EditorGUILayout.PropertyField(_propFlipX); EditorGUILayout.PropertyField(_propFlipY); EditorGUILayout.Space(); EditorGUILayout.PropertyField(_propHotSwap); EditorGUILayout.PropertyField(_propFrameRates); EditorGUILayout.PropertyField(_propSettings); if (GUI.changed) { EditorUtility.SetDirty(_camera); } serializedObject.ApplyModifiedProperties(); }
public void SelectDeviceAndMode() { _device = null; _mode = null; _videoInput = -1; _device = SelectDevice(); if (_device != null) { _mode = SelectMode(); _videoInput = SelectVideoInputIndex(); } else { Debug.LogWarning("[AVPro Live Camera] Could not find the device."); } }
public void OnDestroy() { if (_device != null) _device.Close(); _device = null; }
private static AVProLiveCameraDeviceMode GetClosestMode(AVProLiveCameraDevice device, List<Vector2> resolutions, bool maintainApectRatio) { AVProLiveCameraDeviceMode result = null; for (int i = 0; i < resolutions.Count; i++) { result = device.GetClosestMode(Mathf.FloorToInt(resolutions[i].x), Mathf.FloorToInt(resolutions[i].y), maintainApectRatio); if (result != null) break; } return result; }
private void AddNewDevices() { bool isDeviceAdded = false; int numDevices = AVProLiveCameraPlugin.GetNumDevices(); for (int i = 0; i < numDevices; i++) { string deviceGUID; if (!AVProLiveCameraPlugin.GetDeviceGUID(i, out deviceGUID)) continue; AVProLiveCameraDevice device = FindDeviceWithGUID(deviceGUID); if (device == null) { string deviceName; if (!AVProLiveCameraPlugin.GetDeviceName(i, out deviceName)) continue; int numModes = AVProLiveCameraPlugin.GetNumModes(i); if (numModes > 0) { device = new AVProLiveCameraDevice(deviceName.ToString(), deviceGUID.ToString(), i); _devices.Add(device); isDeviceAdded = true; } } } if (isDeviceAdded) { this.SendMessage("NewDeviceAdded", null, SendMessageOptions.DontRequireReceiver); } }
public void Begin() { SelectDeviceAndMode(); if (_device != null) { _device.Deinterlace = _deinterlace; _device.FlipX = _flipX; _device.FlipY = _flipY; if (!_device.Start(_mode, _videoInput)) { Debug.LogWarning("[AVPro Live Camera] Device failed to start."); _device.Close(); _device = null; _mode = null; _videoInput = -1; } } }
public override void OnInspectorGUI() { _camera = (this.target) as AVProLiveCamera; //EditorGUIUtility.LookLikeInspector(); //DrawDefaultInspector(); if (!Application.isPlaying) { EditorGUILayout.LabelField("Search for Capture Device:", ""); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Device Select By"); GUILayout.BeginVertical(); AVProLiveCamera.SelectDeviceBy newDeviceSelection = (AVProLiveCamera.SelectDeviceBy)EditorGUILayout.EnumPopup("", _camera._deviceSelection); switch (newDeviceSelection) { case AVProLiveCamera.SelectDeviceBy.Default: break; case AVProLiveCamera.SelectDeviceBy.Name: if (_camera._deviceSelection != newDeviceSelection && _camera._desiredDeviceNames.Count == 0) { _camera._desiredDeviceNames.Add("Enter Camera Name"); } EditorGUILayout.BeginVertical(); for (int index = 0; index < _camera._desiredDeviceNames.Count; index++) { EditorGUILayout.BeginHorizontal(); /*EditorGUILayout.BeginHorizontal(GUILayout.Width(96)); * if (index != 0) * { * if (GUILayout.Button("Up")) * { * string temp = _camera._desiredDeviceNames[index - 1]; * _camera._desiredDeviceNames[index - 1] = _camera._desiredDeviceNames[index]; * _camera._desiredDeviceNames[index] = temp; * HandleUtility.Repaint(); * } * } * if (index + 1 < _camera._desiredDeviceNames.Count) * { * if (GUILayout.Button("Down")) * { * string temp = _camera._desiredDeviceNames[index + 1]; * _camera._desiredDeviceNames[index + 1] = _camera._desiredDeviceNames[index]; * _camera._desiredDeviceNames[index] = temp; * HandleUtility.Repaint(); * } * } * EditorGUILayout.EndHorizontal();*/ if (GUILayout.Button("-")) { _camera._desiredDeviceNames.RemoveAt(index); break; } else { _camera._desiredDeviceNames[index] = EditorGUILayout.TextField(_camera._desiredDeviceNames[index]); } EditorGUILayout.EndHorizontal(); } if (GUILayout.Button("+")) { _camera._desiredDeviceNames.Add(string.Empty); this.Repaint(); } EditorGUILayout.EndVertical(); break; case AVProLiveCamera.SelectDeviceBy.Index: _camera._desiredDeviceIndex = EditorGUILayout.IntField(_camera._desiredDeviceIndex); break; } _camera._deviceSelection = newDeviceSelection; GUILayout.EndVertical(); GUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Mode Select By"); GUILayout.BeginVertical(); AVProLiveCamera.SelectModeBy newResolutionSelection = (AVProLiveCamera.SelectModeBy)EditorGUILayout.EnumPopup("", _camera._modeSelection); switch (newResolutionSelection) { case AVProLiveCamera.SelectModeBy.Default: break; case AVProLiveCamera.SelectModeBy.Resolution: if (_camera._modeSelection != newResolutionSelection && _camera._desiredResolutions.Count == 0) { _camera._desiredResolutions.Add(new Vector2(640, 360)); } EditorGUILayout.BeginVertical(); _camera._maintainAspectRatio = EditorGUILayout.Toggle("Maintain Aspect Ratio", _camera._maintainAspectRatio); for (int index = 0; index < _camera._desiredResolutions.Count; index++) { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("-")) { _camera._desiredResolutions.RemoveAt(index); break; } else { Vector2 res = _camera._desiredResolutions[index]; res.x = EditorGUILayout.FloatField(res.x, GUILayout.Width(64)); EditorGUILayout.LabelField("x", "", GUILayout.Width(24)); res.y = EditorGUILayout.FloatField(res.y, GUILayout.Width(64)); _camera._desiredResolutions[index] = res; } EditorGUILayout.EndHorizontal(); } if (GUILayout.Button("+")) { _camera._desiredResolutions.Add(new Vector2(640, 360)); this.Repaint(); } EditorGUILayout.EndVertical(); break; case AVProLiveCamera.SelectModeBy.Index: _camera._desiredModeIndex = EditorGUILayout.IntField(_camera._desiredModeIndex); break; } _camera._modeSelection = newResolutionSelection; GUILayout.EndVertical(); GUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Video Input Select By"); GUILayout.BeginVertical(); AVProLiveCamera.SelectDeviceBy newVideoInputSelection = (AVProLiveCamera.SelectDeviceBy)EditorGUILayout.EnumPopup("", _camera._videoInputSelection); switch (newVideoInputSelection) { case AVProLiveCamera.SelectDeviceBy.Default: break; case AVProLiveCamera.SelectDeviceBy.Name: if (_camera._videoInputSelection != newVideoInputSelection && _camera._desiredVideoInputs.Count == 0) { _camera._desiredVideoInputs.Add(AVProLiveCameraPlugin.VideoInput.Video_Serial_Digital); } EditorGUILayout.BeginVertical(); for (int index = 0; index < _camera._desiredVideoInputs.Count; index++) { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("-")) { _camera._desiredVideoInputs.RemoveAt(index); break; } else { _camera._desiredVideoInputs[index] = (AVProLiveCameraPlugin.VideoInput)EditorGUILayout.EnumPopup(_camera._desiredVideoInputs[index]); } EditorGUILayout.EndHorizontal(); } if (GUILayout.Button("+")) { _camera._desiredVideoInputs.Add(AVProLiveCameraPlugin.VideoInput.Video_Serial_Digital); this.Repaint(); } EditorGUILayout.EndVertical(); break; case AVProLiveCamera.SelectDeviceBy.Index: _camera._desiredVideoInputIndex = EditorGUILayout.IntField(_camera._desiredVideoInputIndex); break; } _camera._videoInputSelection = newVideoInputSelection; GUILayout.EndVertical(); GUILayout.EndHorizontal(); EditorGUILayout.Space(); _camera._playOnStart = EditorGUILayout.Toggle("Play On Start", _camera._playOnStart); _camera._deinterlace = EditorGUILayout.Toggle("Deinterlace", _camera._deinterlace); } else { if (_camera.Device != null) { _preview = GUILayout.Toggle(_preview, "Inspector Preview"); AVProLiveCameraDevice device = _camera.Device; if (_preview && device.OutputTexture != null) { Rect textureRect = GUILayoutUtility.GetRect(64.0f, 64.0f, GUILayout.MinWidth(64.0f), GUILayout.MinHeight(64.0f)); GUI.DrawTexture(textureRect, device.OutputTexture, ScaleMode.ScaleToFit); } GUILayout.Label("Device: " + device.Name); GUILayout.Label(string.Format("Mode: {0}x{1} {2}", device.CurrentWidth, device.CurrentHeight, device.CurrentFormat)); if (device.FramesTotal > 30) { GUILayout.Label("Displaying at " + device.DisplayFPS.ToString("F1") + " fps"); } else { GUILayout.Label("Displaying at ... fps"); } if (device.IsRunning) { GUILayout.BeginHorizontal(); if (GUILayout.Button("Stop Camera")) { device.Close(); } if (device.IsPaused) { if (GUILayout.Button("Unpause Stream")) { device.Play(); } } else { if (GUILayout.Button("Pause Stream")) { device.Pause(); } } GUILayout.EndHorizontal(); } else { if (GUILayout.Button("Start Camera")) { _camera.Begin(); } } GUI.enabled = device.CanShowConfigWindow(); if (GUILayout.Button("Show Config Window")) { device.ShowConfigWindow(); } GUI.enabled = true; if (device.NumSettings > 0) { EditorGUILayout.PrefixLabel("Device Settings", EditorStyles.boldLabel); for (int j = 0; j < device.NumSettings; j++) { AVProLiveCameraSettingBase settingBase = device.GetVideoSettingByIndex(j); GUILayout.BeginHorizontal(); GUI.enabled = !settingBase.IsAutomatic; if (GUILayout.Button("D", GUILayout.ExpandWidth(false))) { settingBase.SetDefault(); } GUI.enabled = true; GUILayout.Label(settingBase.Name, GUILayout.ExpandWidth(false), GUILayout.MaxWidth(64.0f)); GUI.enabled = !settingBase.IsAutomatic; switch (settingBase.DataTypeValue) { case AVProLiveCameraSettingBase.DataType.Boolean: AVProLiveCameraSettingBoolean settingBool = (AVProLiveCameraSettingBoolean)settingBase; settingBool.CurrentValue = GUILayout.Toggle(settingBool.CurrentValue, "", GUILayout.ExpandWidth(true)); break; case AVProLiveCameraSettingBase.DataType.Float: AVProLiveCameraSettingFloat settingFloat = (AVProLiveCameraSettingFloat)settingBase; float sliderValue = GUILayout.HorizontalSlider(settingFloat.CurrentValue, settingFloat.MinValue, settingFloat.MaxValue, GUILayout.ExpandWidth(true)); if (GUI.enabled) { settingFloat.CurrentValue = sliderValue; } GUILayout.Label(((long)settingFloat.CurrentValue).ToString(), GUILayout.Width(32.0f), GUILayout.ExpandWidth(false)); GUI.enabled = settingBase.CanAutomatic; settingBase.IsAutomatic = GUILayout.Toggle(settingBase.IsAutomatic, "", GUILayout.Width(32.0f)); GUI.enabled = true; break; } GUI.enabled = true; GUILayout.EndHorizontal(); } if (GUILayout.Button("Defaults")) { for (int j = 0; j < device.NumSettings; j++) { AVProLiveCameraSettingBase settingBase = device.GetVideoSettingByIndex(j); settingBase.SetDefault(); } } device.Update_Settings(); } //EditorGUILayout.Toggle("Running:", device.IsRunning); } if (_preview) { //HandleUtility.Repaint(); this.Repaint(); } } GUI.enabled = true; _camera._flipX = EditorGUILayout.Toggle("Flip X", _camera._flipX); _camera._flipY = EditorGUILayout.Toggle("Flip Y", _camera._flipY); EditorGUILayout.Space(); _camera._updateHotSwap = EditorGUILayout.Toggle("Update HotSwap", _camera._updateHotSwap); _camera._updateFrameRates = EditorGUILayout.Toggle("Update Frame Rates", _camera._updateFrameRates); _camera._updateSettings = EditorGUILayout.Toggle("Update Settings", _camera._updateSettings); if (GUI.changed) { EditorUtility.SetDirty(_camera); } }
public void OnGUI() { if (_guiSkin != null) { if (_buttonStyle == null) { _buttonStyle = _guiSkin.FindStyle("LeftButton"); } GUI.skin = _guiSkin; } if (_buttonStyle == null) { _buttonStyle = GUI.skin.button; } _horizScrollPos = GUILayout.BeginScrollView(_horizScrollPos, false, false); GUILayout.BeginHorizontal(); for (int i = 0; i < AVProLiveCameraManager.Instance.NumDevices; i++) { GUILayout.BeginVertical("box", GUILayout.MaxWidth(300)); AVProLiveCameraDevice device = AVProLiveCameraManager.Instance.GetDevice(i); GUI.enabled = device.IsConnected; Rect cameraRect = GUILayoutUtility.GetRect(300, 168); if (GUI.Button(cameraRect, "")) { if (_zoomed == null) { _zoomed = device.OutputTexture; _zoomSrcDest = cameraRect; _zoomUp = true; } } // Thumbnail image if (device.OutputTexture != null && _zoomed != device.OutputTexture) { if (_material != null) { DrawTexture(cameraRect, device.OutputTexture, ScaleMode.ScaleToFit, _material); } else { GUI.DrawTexture(cameraRect, device.OutputTexture, ScaleMode.ScaleToFit, false); } } GUILayout.Box("Camera " + i + ": " + device.Name); if (!device.IsRunning) { GUILayout.BeginHorizontal(); GUI.color = Color.green; if (GUILayout.Button("Start")) { if (_zoomed == null) { device.Start(-1); } } GUI.color = Color.white; } else { GUILayout.Box(string.Format("{0}x{1} {2}", device.CurrentWidth, device.CurrentHeight, device.CurrentFormat)); GUILayout.BeginHorizontal(); GUILayout.Box(string.Format("Capture {0}hz Display {1}hz", device.CaptureFPS.ToString("F2"), device.DisplayFPS.ToString("F2"))); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUI.color = Color.red; if (GUILayout.Button("Stop")) { if (_zoomed == null) { device.Close(); } } GUI.color = Color.white; } GUI.enabled = device.CanShowConfigWindow(); if (GUILayout.Button("Configure", GUILayout.ExpandWidth(false))) { if (_zoomed == null) { device.ShowConfigWindow(); } } GUI.enabled = true; GUILayout.EndHorizontal(); if (device.NumVideoInputs > 0) { GUILayout.Label("Select a video input:"); _scrollVideoInputPos[i] = GUILayout.BeginScrollView(_scrollVideoInputPos[i], false, false); for (int j = 0; j < device.NumVideoInputs; j++) { if (GUILayout.Button(device.GetVideoInputName(j))) { if (_zoomed == null) { // Start selected device device.Close(); device.Start(-1, j); } } } GUILayout.EndScrollView(); } if (device.Deinterlace != GUILayout.Toggle(device.Deinterlace, "Deinterlace", GUILayout.ExpandWidth(true))) { device.Deinterlace = !device.Deinterlace; if (device.IsRunning) { device.Close(); device.Start(-1, -1); } } GUILayout.BeginHorizontal(); device.FlipX = GUILayout.Toggle(device.FlipX, "Flip X", GUILayout.ExpandWidth(true)); device.FlipY = GUILayout.Toggle(device.FlipY, "Flip Y", GUILayout.ExpandWidth(true)); GUILayout.EndHorizontal(); _scrollPos[i] = GUILayout.BeginScrollView(_scrollPos[i], false, false); if (device.NumSettings > 0) { GUI.color = Color.cyan; _showSettings[i] = GUILayout.Toggle(_showSettings[i], "Settings ▶", GUILayout.ExpandWidth(true)); GUI.color = Color.white; if (_showSettings[i]) { device.UpdateSettings = GUILayout.Toggle(device.UpdateSettings, "Update Settings", GUILayout.ExpandWidth(true)); for (int j = 0; j < device.NumSettings; j++) { AVProLiveCameraSettingBase settingBase = device.GetVideoSettingByIndex(j); GUILayout.BeginHorizontal(); GUI.enabled = !settingBase.IsAutomatic; if (GUILayout.Button("D", GUILayout.ExpandWidth(false))) { settingBase.SetDefault(); } GUI.enabled = true; GUILayout.Label(settingBase.Name, GUILayout.ExpandWidth(false)); GUI.enabled = !settingBase.IsAutomatic; switch (settingBase.DataTypeValue) { case AVProLiveCameraSettingBase.DataType.Boolean: AVProLiveCameraSettingBoolean settingBool = (AVProLiveCameraSettingBoolean)settingBase; settingBool.CurrentValue = GUILayout.Toggle(settingBool.CurrentValue, "", GUILayout.ExpandWidth(true)); break; case AVProLiveCameraSettingBase.DataType.Float: AVProLiveCameraSettingFloat settingFloat = (AVProLiveCameraSettingFloat)settingBase; settingFloat.CurrentValue = GUILayout.HorizontalSlider(settingFloat.CurrentValue, settingFloat.MinValue, settingFloat.MaxValue, GUILayout.ExpandWidth(true)); GUI.enabled = settingBase.CanAutomatic; settingBase.IsAutomatic = GUILayout.Toggle(settingBase.IsAutomatic, "", GUILayout.Width(32.0f)); GUI.enabled = true; break; } GUI.enabled = true; GUILayout.EndHorizontal(); } if (GUILayout.Button("Defaults")) { for (int j = 0; j < device.NumSettings; j++) { AVProLiveCameraSettingBase settingBase = device.GetVideoSettingByIndex(j); settingBase.SetDefault(); } } } } GUI.color = Color.cyan; _showModes[i] = GUILayout.Toggle(_showModes[i], "Modes ▶", GUILayout.ExpandWidth(true)); GUI.color = Color.white; if (_showModes[i]) { for (int j = 0; j < device.NumModes; j++) { AVProLiveCameraDeviceMode mode = device.GetMode(j); if (GUILayout.Button("" + mode.Width + "x" + mode.Height + " " + mode.FPS.ToString("F2") + "hz " + "[" + mode.Format + "]", _buttonStyle)) { if (_zoomed == null) { // Start selected device device.Close(); Debug.Log("Selecting mode: " + j); device.Start(mode); } } } } GUILayout.EndScrollView(); GUILayout.EndVertical(); } GUILayout.EndHorizontal(); GUILayout.EndScrollView(); // Show zoomed camera image if (_zoomed != null) { Rect fullScreenRect = new Rect(0f, 0f, Screen.width, Screen.height); float t = Mathf.Clamp01(_zoomTimer / ZoomTime); t = Mathf.SmoothStep(0f, 1f, t); Rect r = new Rect(); r.x = Mathf.Lerp(_zoomSrcDest.x, fullScreenRect.x, t); r.y = Mathf.Lerp(_zoomSrcDest.y, fullScreenRect.y, t); r.width = Mathf.Lerp(_zoomSrcDest.width, fullScreenRect.width, t); r.height = Mathf.Lerp(_zoomSrcDest.height, fullScreenRect.height, t); if (_material != null) { DrawTexture(r, _zoomed, ScaleMode.ScaleToFit, _material); } else { GUI.DrawTexture(r, _zoomed, ScaleMode.ScaleToFit, false); } } }