示例#1
0
        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;
            }
        }
示例#2
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);
            }
        }
    }
示例#3
0
        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);
                }
            }
        }
示例#4
0
    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();
        }
    }
示例#5
0
    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);
    }
示例#6
0
    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;
    }
示例#7
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
				}
			}
		}
	}
示例#9
0
 public void OnDestroy()
 {
     if (_device != null)
     {
         _device.Close();
     }
     _device = null;
 }
示例#10
0
        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
                });
            }
        }
示例#11
0
 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);
     }
 }
示例#12
0
 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;
 }
示例#14
0
    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);
        }
    }
示例#16
0
    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);
    }
示例#17
0
    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);
    }
示例#18
0
    private AVProLiveCameraDevice FindDeviceWithGUID(string guid)
    {
        AVProLiveCameraDevice result = null;

        foreach (AVProLiveCameraDevice device in _devices)
        {
            if (device.GUID == guid)
            {
                result = device;
                break;
            }
        }

        return(result);
    }
示例#19
0
    // 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
        }
    }
示例#20
0
    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);
    }
示例#21
0
    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.");
        }
    }
示例#22
0
    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;
            }
        }
    }
示例#23
0
        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;
        }
    }
示例#25
0
        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);
        }
示例#26
0
    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;
        }
    }
示例#28
0
        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();
            }
        }
示例#29
0
    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);
        }
    }
示例#30
0
    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();
    }
示例#33
0
    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.");
        }
    }
示例#34
0
 public void OnDestroy()
 {
     if (_device != null)
         _device.Close();
     _device = null;
 }
示例#35
0
 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);
        }
    }
示例#37
0
    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);
        }
    }
示例#39
0
        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);
                }
            }
        }