private void GUI_RecordingStatus()
	{
		GUILayout.Space(8.0f);
		GUILayout.Label("Output", "box");
		GUILayout.BeginVertical("box");

        DrawGuiField("Recording to", System.IO.Path.GetFileName(_movieCapture.LastFilePath));
		GUILayout.Space(8.0f);
		
		GUILayout.Label("Video", "box");
        DrawGuiField("Dimensions", _movieCapture.GetRecordingWidth() + "x" + _movieCapture.GetRecordingHeight() + " @ " + ((int)_movieCapture._frameRate).ToString() + "hz");
        DrawGuiField("Codec", _movieCapture._codecName);
		
		if (!_movieCapture._noAudio && _movieCapture._isRealTime)
		{
			GUILayout.Label("Audio", "box");
            DrawGuiField("Source", _movieCapture._audioDeviceName);
            DrawGuiField("Codec", _movieCapture._audioCodecName);
			if (_movieCapture._audioDeviceName == "Unity")
			{
                DrawGuiField("Sample Rate", _movieCapture._unityAudioSampleRate.ToString() + "hz");
                DrawGuiField("Channels", _movieCapture._unityAudioChannelCount.ToString());
			}
		}
		
		GUILayout.EndVertical();
		
		GUILayout.Space(8.0f);
		
		GUILayout.Label("Stats", "box");
		GUILayout.BeginVertical("box");

		if (_movieCapture._frameTotal >= (int)_movieCapture._frameRate * 2)
		{
			Color originalColor = GUI.color;
			float fpsDelta = (_movieCapture._fps - (int)_movieCapture._frameRate);
			GUI.color = Color.red;
			if (fpsDelta > -10)
				GUI.color = Color.yellow;
			if (fpsDelta > -2)
				GUI.color = Color.green;

            DrawGuiField("Capture Rate", _movieCapture._fps.ToString("F1") + " FPS");
			
			GUI.color = originalColor;
		}
		else
		{
            DrawGuiField("Capture Rate:", ".. FPS");
		}

        DrawGuiField("File Size", ((float)_lastFileSize / (1024f * 1024f)).ToString("F1") + "MB");
        DrawGuiField("Video Length", _lastEncodedMinutes + ":" + _lastEncodedSeconds + "s");
        DrawGuiField("Encoded Frames", _movieCapture.NumEncodedFrames.ToString());
		
		GUILayout.Label("Dropped Frames", "box");
        DrawGuiField("In Unity", _movieCapture.NumDroppedFrames.ToString());
        DrawGuiField("In Encoder ", _movieCapture.NumDroppedEncoderFrames.ToString());
		if (!_movieCapture._noAudio)
		{
			if (_movieCapture._audioCapture && _movieCapture._audioDeviceName == "Unity")
			{
				DrawGuiField("Audio Overflows", _movieCapture._audioCapture.OverflowCount.ToString());
			}
		}
		
		GUILayout.EndVertical();

		GUILayout.BeginHorizontal();

		if (!_movieCapture.IsPaused())
		{
			if (GUILayout.Button("Pause Capture"))
			{
				PauseCapture();
			}
		}
		else
		{
			if (GUILayout.Button("Resume Capture"))
			{
				ResumeCapture();
			}					
		}

		if (GUILayout.Button("Cancel Capture"))
		{
			CancelCapture();
		}
		if (GUILayout.Button("Stop Capture"))
		{
			StopCapture();
		}

		GUILayout.EndHorizontal();
	}
예제 #2
0
    void MyWindow(int id)
    {
        if (_movieCapture.IsCapturing())
        {
            GUI_RecordingStatus();
            return;
        }

        GUILayout.BeginVertical();

        if (_movieCapture != null)
        {
            GUILayout.Label("Resolution:");
            GUILayout.BeginHorizontal();
            _downScaleIndex = GUILayout.SelectionGrid(_downScaleIndex, _downScales, _downScales.Length);
            switch (_downScaleIndex)
            {
            case 0:
                _movieCapture._downScale = AVProMovieCaptureBase.DownScale.Original;
                break;

            case 1:
                _movieCapture._downScale = AVProMovieCaptureBase.DownScale.Half;
                break;

            case 2:
                _movieCapture._downScale = AVProMovieCaptureBase.DownScale.Quarter;
                break;

            case 3:
                _movieCapture._downScale = AVProMovieCaptureBase.DownScale.Eighth;
                break;

            case 4:
                _movieCapture._downScale = AVProMovieCaptureBase.DownScale.Sixteenth;
                break;

            case 5:
                _movieCapture._downScale = AVProMovieCaptureBase.DownScale.Specific;
                break;
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal(GUILayout.Width(256));
            if (_movieCapture._downScale == AVProMovieCaptureBase.DownScale.Specific)
            {
                string maxWidthString = GUILayout.TextField(Mathf.FloorToInt(_movieCapture._maxVideoSize.x).ToString(), 4);
                int    maxWidth       = 0;
                if (int.TryParse(maxWidthString, out maxWidth))
                {
                    _movieCapture._maxVideoSize.x = Mathf.Clamp(maxWidth, 0, 4096);
                }

                GUILayout.Label("x", GUILayout.Width(20));

                string maxHeightString = GUILayout.TextField(Mathf.FloorToInt(_movieCapture._maxVideoSize.y).ToString(), 4);
                int    maxHeight       = 0;
                if (int.TryParse(maxHeightString, out maxHeight))
                {
                    _movieCapture._maxVideoSize.y = Mathf.Clamp(maxHeight, 0, 4096);
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Frame Rate:");
            _frameRateIndex = GUILayout.SelectionGrid(_frameRateIndex, _frameRates, _frameRates.Length);
            switch (_frameRateIndex)
            {
            case 0:
                _movieCapture._frameRate = AVProMovieCaptureBase.FrameRate.Fifteen;
                break;

            case 1:
                _movieCapture._frameRate = AVProMovieCaptureBase.FrameRate.TwentyFour;
                break;

            case 2:
                _movieCapture._frameRate = AVProMovieCaptureBase.FrameRate.TwentyFive;
                break;

            case 3:
                _movieCapture._frameRate = AVProMovieCaptureBase.FrameRate.Thirty;
                break;

            case 4:
                _movieCapture._frameRate = AVProMovieCaptureBase.FrameRate.Fifty;
                break;

            case 5:
                _movieCapture._frameRate = AVProMovieCaptureBase.FrameRate.Sixty;
                break;
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(16f);

            _movieCapture._isRealTime = GUILayout.Toggle(_movieCapture._isRealTime, "RealTime");

            GUILayout.Space(16f);



            // Video Codec
            GUILayout.BeginHorizontal();
            if (_shownSection != 0)
            {
                if (GUILayout.Button("+", GUILayout.Width(24)))
                {
                    _shownSection = 0;
                }
            }
            else
            {
                if (GUILayout.Button("-", GUILayout.Width(24)))
                {
                    _shownSection = -1;
                }
            }
            GUILayout.Label("Using Video Codec: " + _movieCapture._codecName);
            if (_movieCapture._codecIndex >= 0 && _videoCodecConfigurable[_movieCapture._codecIndex])
            {
                GUILayout.Space(16f);
                if (GUILayout.Button("Configure Codec"))
                {
                    AVProMovieCapturePlugin.ConfigureVideoCodec(_movieCapture._codecIndex);
                }
            }
            GUILayout.EndHorizontal();

            if (_videoCodecNames != null && _shownSection == 0)
            {
                GUILayout.Label("Select Video Codec:");
                _videoPos = GUILayout.BeginScrollView(_videoPos, GUILayout.Height(100));
                int newCodecIndex = GUILayout.SelectionGrid(-1, _videoCodecNames, 1) - 1;
                GUILayout.EndScrollView();

                if (newCodecIndex >= -1)
                {
                    _movieCapture._codecIndex = newCodecIndex;
                    if (_movieCapture._codecIndex >= 0)
                    {
                        _movieCapture._codecName = _videoCodecNames[_movieCapture._codecIndex + 1];
                    }
                    else
                    {
                        _movieCapture._codecName = "Uncompressed";
                    }

                    _shownSection = -1;
                }

                GUILayout.Space(16f);
            }


            _movieCapture._noAudio = !GUILayout.Toggle(!_movieCapture._noAudio, "Record Audio");
            GUI.enabled            = !_movieCapture._noAudio;

            // Audio Device
            GUILayout.BeginHorizontal();
            if (_shownSection != 1)
            {
                if (GUILayout.Button("+", GUILayout.Width(24)))
                {
                    _shownSection = 1;
                }
            }
            else
            {
                if (GUILayout.Button("-", GUILayout.Width(24)))
                {
                    _shownSection = -1;
                }
            }
            GUILayout.Label("Using Audio Source: " + _movieCapture._audioDeviceName);
            GUILayout.EndHorizontal();
            if (_audioDeviceNames != null && _shownSection == 1)
            {
                GUILayout.Label("Select Audio Source:");
                _audioPos = GUILayout.BeginScrollView(_audioPos, GUILayout.Height(100));
                int newAudioIndex = GUILayout.SelectionGrid(-1, _audioDeviceNames, 1) - 1;
                GUILayout.EndScrollView();

                if (newAudioIndex >= -1)
                {
                    _movieCapture._audioDeviceIndex = newAudioIndex;
                    if (_movieCapture._audioDeviceIndex >= 0)
                    {
                        _movieCapture._audioDeviceName = _audioDeviceNames[_movieCapture._audioDeviceIndex + 1];
                    }
                    else
                    {
                        _movieCapture._audioDeviceName = "Unity";
                    }

                    _shownSection = -1;
                }

                GUILayout.Space(16f);
            }



            // Audio Codec
            GUILayout.BeginHorizontal();
            if (_shownSection != 2)
            {
                if (GUILayout.Button("+", GUILayout.Width(24)))
                {
                    _shownSection = 2;
                }
            }
            else
            {
                if (GUILayout.Button("-", GUILayout.Width(24)))
                {
                    _shownSection = -1;
                }
            }
            GUILayout.Label("Using Audio Codec: " + _movieCapture._audioCodecName);
            if (_movieCapture._audioCodecIndex >= 0 && _audioCodecConfigurable[_movieCapture._audioCodecIndex])
            {
                GUILayout.Space(16f);
                if (GUILayout.Button("Configure Codec"))
                {
                    AVProMovieCapturePlugin.ConfigureAudioCodec(_movieCapture._audioCodecIndex);
                }
            }
            GUILayout.EndHorizontal();

            if (_audioCodecNames != null && _shownSection == 2)
            {
                GUILayout.Label("Select Audio Codec:");
                _audioCodecPos = GUILayout.BeginScrollView(_audioCodecPos, GUILayout.Height(100));
                int newCodecIndex = GUILayout.SelectionGrid(-1, _audioCodecNames, 1) - 1;
                GUILayout.EndScrollView();

                if (newCodecIndex >= -1)
                {
                    _movieCapture._audioCodecIndex = newCodecIndex;
                    if (_movieCapture._audioCodecIndex >= 0)
                    {
                        _movieCapture._audioCodecName = _audioCodecNames[_movieCapture._audioCodecIndex + 1];
                    }
                    else
                    {
                        _movieCapture._audioCodecName = "Uncompressed";
                    }

                    _shownSection = -1;
                }

                GUILayout.Space(16f);
            }

            GUI.enabled = true;

            GUILayout.Space(16f);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Filename Prefix & Ext: ");
            _movieCapture._autoFilenamePrefix    = GUILayout.TextField(_movieCapture._autoFilenamePrefix, 64);
            _movieCapture._autoFilenameExtension = GUILayout.TextField(_movieCapture._autoFilenameExtension, 8);
            GUILayout.EndHorizontal();
            GUILayout.Space(16f);
            GUILayout.Space(16f);

            GUILayout.Label("(Press Esc or CTRL-F5 to stop capture)");

            GUILayout.BeginHorizontal();
            if (!_movieCapture.IsCapturing())
            {
                if (GUILayout.Button("Start Capture"))
                {
                    //print ("calisiyom");
                    StartCapture();
                }
            }
            else
            {
                if (!_movieCapture.IsPaused())
                {
                    if (GUILayout.Button("Pause Capture"))
                    {
                        PauseCapture();
                    }
                }
                else
                {
                    if (GUILayout.Button("Resume Capture"))
                    {
                        ResumeCapture();
                    }
                }

                if (GUILayout.Button("Stop Capture"))
                {
                    StopCapture();
                }
            }
            GUILayout.EndHorizontal();

            if (_movieCapture.IsCapturing())
            {
                if (!string.IsNullOrEmpty(_movieCapture.LastFilePath))
                {
                    GUILayout.Label("Writing file: '" + System.IO.Path.GetFileName(_movieCapture.LastFilePath) + "'");
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(_movieCapture.LastFilePath))
                {
                    GUILayout.Label("Last file written: '" + System.IO.Path.GetFileName(_movieCapture.LastFilePath) + "'");
                }
            }
        }

        GUILayout.EndVertical();
    }
    private void DrawControlButtonsGUI()
    {
        EditorGUILayout.BeginHorizontal();
        if (_capture == null)
        {
            GUI.backgroundColor = Color.green;
            if (GUILayout.Button("Start Capture"))
            {
                bool isReady = true;
                if (_sourceType == SourceType.Camera && _cameraNode == null)
                {
                    Debug.LogError("[AVProMovieCapture] Please select a Camera to capture from, or select to capture from Scene.");
                    isReady = false;
                }

                if (isReady)
                {
                    if (!Application.isPlaying)
                    {
                        EditorApplication.isPlaying = true;
                        _queueStart = true;
                    }
                    else
                    {
                        StartCapture();
                        Repaint();
                    }
                }
            }
        }
        else
        {
            GUI.backgroundColor = Color.red;
            if (GUILayout.Button("Stop Capture"))
            {
                StopCapture();
                Repaint();
            }
        }

        EditorGUI.BeginDisabledGroup(_capture == null);
        if (_capture != null && _capture.IsPaused())
        {
            GUI.backgroundColor = Color.green;
            if (GUILayout.Button("Resume Capture"))
            {
                _capture.ResumeCapture();
                Repaint();
            }
        }
        else
        {
            GUI.backgroundColor = Color.yellow;
            if (GUILayout.Button("Pause Capture"))
            {
                _capture.PauseCapture();
                Repaint();
            }
        }
        EditorGUI.EndDisabledGroup();

        EditorGUILayout.EndHorizontal();

        GUI.backgroundColor = Color.white;
    }