Пример #1
0
 public void UnloadMovie()
 {
     if (_moviePlayer != null)
     {
         _moviePlayer.Dispose();
         _moviePlayer = null;
     }
 }
Пример #2
0
 void OnDestroy()
 {
     DestroyTextures();
     if (_movie != null)
     {
         _movie.Dispose();
         _movie = null;
     }
 }
Пример #3
0
 void OnDestroy()
 {
     DestroyTextures();
     if (_movie != null)
     {
         _movie.Dispose();
         _movie = null;
     }
 }
Пример #4
0
    private void DrawVideoControls(Rect area, AVProQuickTimeGUIDisplay movieGUI)
    {
        AVProQuickTimeMovie movie  = movieGUI._movie;
        AVProQuickTime      player = movie.MovieInstance;

        if (player == null)
        {
            return;
        }

        // Close button
        if (GUI.Button(new Rect(area.x + (area.width - 32), area.y, 32, 32), "X"))
        {
            _removeMovie = movieGUI;
        }

        // Duplicate button
        if (GUI.Button(new Rect(area.x + (area.width - 64), area.y, 32, 32), "+"))
        {
            Add(movie._folder, movie._filename);
        }

        // Video properties
        GUILayout.BeginArea(new Rect(area.x, area.y, area.width / 2, area.height / 2));
        GUILayout.Label(player.Width + "x" + player.Height + "/" + player.FrameRate.ToString("F2") + "hz");
        GUILayout.EndArea();

        GUILayout.BeginArea(new Rect(area.x, area.y + (area.height - 32), area.width, 32));
        GUILayout.BeginHorizontal();
        float position    = player.PositionSeconds;
        float newPosition = GUILayout.HorizontalSlider(position, 0.0f, player.DurationSeconds, GUILayout.ExpandWidth(true));

        if (position != newPosition)
        {
            player.PositionSeconds = newPosition;
        }
        if (player.IsPlaying)
        {
            if (GUILayout.Button("Pause", GUILayout.ExpandWidth(false)))
            {
                player.Pause();
            }
        }
        else
        {
            if (GUILayout.Button("Play", GUILayout.ExpandWidth(false)))
            {
                player.Play();
            }
        }
        GUILayout.EndHorizontal();
        GUILayout.EndArea();
    }
Пример #5
0
    public bool LoadMovie()
    {
        if (_moviePlayer == null)
        {
            _moviePlayer = new AVProQuickTime();
        }

        _moviePlayer.IsActive = this.enabled;

        bool loaded = false;

        switch (_source)
        {
        case AVProQuickTimePlugin.MovieSource.LocalFile:
            loaded = _moviePlayer.StartFromFile(GetFilePath(), _loop, _allowYUV, _useYUVHD, _ignoreFlips);
            break;

        case AVProQuickTimePlugin.MovieSource.URL:
            loaded = _moviePlayer.StartFromURL(Path.Combine(_folder, _filename), _loop, _allowYUV, _useYUVHD, _ignoreFlips);
            break;

        case AVProQuickTimePlugin.MovieSource.Memory:
            if (_movieData != null)
            {
                loaded = _moviePlayer.StartFromMemory(_movieData, _filename, _loop, _allowYUV, _useYUVHD, _ignoreFlips);
            }
            break;
        }

        if (loaded)
        {
            _moviePlayer.Volume       = _volume;
            _moviePlayer.AudioBalance = _audioBalance;
        }
        else
        {
            Debug.LogWarning("[AVProQuickTime] Couldn't load movie " + _filename);
            UnloadMovie();
        }

        return(loaded);
    }
Пример #6
0
	public bool LoadMovie()
	{
		if (_moviePlayer == null)
		{
			_moviePlayer = new AVProQuickTime();
		}
		
		_moviePlayer.IsActive = this.enabled;

		bool loaded = false;
		switch (_source)
		{
			case AVProQuickTimePlugin.MovieSource.LocalFile:
				loaded = _moviePlayer.StartFromFile(Path.Combine(_folder, _filename), _loop, _allowYUV, _useYUVHD, _ignoreFlips);
				break;
			case AVProQuickTimePlugin.MovieSource.URL:
				loaded = _moviePlayer.StartFromURL(Path.Combine(_folder, _filename), _loop, _allowYUV, _useYUVHD, _ignoreFlips);
				break;
			case AVProQuickTimePlugin.MovieSource.Memory:
				if (_movieData != null)
				{
					loaded = _moviePlayer.StartFromMemory(_movieData, _filename, _loop, _allowYUV, _useYUVHD, _ignoreFlips);
				}
				break;
		}

		if (loaded)
		{
			_moviePlayer.Volume = _volume;
			_moviePlayer.AudioBalance = _audioBalance;
		}
		else
		{
			Debug.LogWarning("[AVProQuickTime] Couldn't load movie " + _filename);
			UnloadMovie();
		}

		return loaded;
	}
Пример #7
0
	public void UnloadMovie()
	{
		if (_moviePlayer != null)
		{
			_moviePlayer.Dispose();
			_moviePlayer = null;
		}
	}
Пример #8
0
    private void ControlWindow(int id)
    {
        if (_movie == null)
        {
            return;
        }

        GUILayout.Space(16f);

        GUILayout.BeginVertical();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Folder: ", GUILayout.Width(80));
        _movie._folder = GUILayout.TextField(_movie._folder, 192);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("File: ", GUILayout.Width(80));
        _movie._filename = GUILayout.TextField(_movie._filename, 128, GUILayout.Width(350));
        if (GUILayout.Button("Load File", GUILayout.Width(90)))
        {
            _movie._source = AVProQuickTimePlugin.MovieSource.LocalFile;
            _movie.LoadMovie();
        }
        if (GUILayout.Button("Load URL", GUILayout.Width(90)))
        {
            _movie._source = AVProQuickTimePlugin.MovieSource.URL;
            _movie.LoadMovie();
        }
#if !UNITY_WEBPLAYER
        if (GUILayout.Button("Load Memory", GUILayout.Width(110)))
        {
            _movie._source = AVProQuickTimePlugin.MovieSource.Memory;
            string fullPath = System.IO.Path.Combine(_movie._folder, _movie._filename);
            if (System.IO.File.Exists(fullPath))
            {
                _movie._movieData = System.IO.File.ReadAllBytes(fullPath);
                _movie.LoadMovie();
            }
        }
#endif
        GUILayout.EndHorizontal();

        AVProQuickTime moviePlayer = _movie.MovieInstance;
        if (moviePlayer != null)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Loaded ", GUILayout.Width(80));
            GUILayout.HorizontalSlider(moviePlayer.LoadedSeconds, 0.0f, moviePlayer.DurationSeconds, GUILayout.Width(200));
            if (moviePlayer.DurationSeconds > 0f)
            {
                GUILayout.Label(((moviePlayer.LoadedSeconds * 100f) / moviePlayer.DurationSeconds) + "%");
            }
            else
            {
                GUILayout.Label("0%");
            }
            GUILayout.EndHorizontal();


            if (moviePlayer.LoadedSeconds > 0f)
            {
                GUILayout.Label("Resolution: " + moviePlayer.Width + "x" + moviePlayer.Height + " @ " + moviePlayer.FrameRate.ToString("F2") + "hz");


                GUILayout.BeginHorizontal();
                GUILayout.Label("Volume ", GUILayout.Width(80));
                float volume    = _movie._volume;
                float newVolume = GUILayout.HorizontalSlider(volume, 0.0f, 1.0f, GUILayout.Width(200));
                if (volume != newVolume)
                {
                    _movie._volume = newVolume;
                }
                GUILayout.Label(_movie._volume.ToString("F1"));
                GUILayout.EndHorizontal();


                GUILayout.BeginHorizontal();
                GUILayout.Label("Time ", GUILayout.Width(80));
                float position    = moviePlayer.PositionSeconds;
                float newPosition = GUILayout.HorizontalSlider(position, 0.0f, moviePlayer.DurationSeconds, GUILayout.Width(200));
                if (position != newPosition)
                {
                    moviePlayer.PositionSeconds = newPosition;
                }
                GUILayout.Label(moviePlayer.PositionSeconds.ToString("F1") + " / " + moviePlayer.DurationSeconds.ToString("F1") + "s");

                if (GUILayout.Button("Play"))
                {
                    moviePlayer.Play();
                }
                if (GUILayout.Button("Pause"))
                {
                    moviePlayer.Pause();
                }

                GUILayout.EndHorizontal();


                GUILayout.BeginHorizontal();

                GUILayout.Label("Frame " + moviePlayer.Frame.ToString() + " / " + moviePlayer.FrameCount.ToString());

                if (GUILayout.Button("<", GUILayout.Width(50)))
                {
                    if (moviePlayer.Frame > 0)
                    {
                        moviePlayer.Frame--;
                    }
                }
                if (GUILayout.Button(">", GUILayout.Width(50)))
                {
                    moviePlayer.Frame++;
                }

                GUILayout.EndHorizontal();



                if (!moviePlayer.IsPaused)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label("Rate: " + moviePlayer.PlaybackRate.ToString("F2") + "x");

                    if (GUILayout.Button("Reverse", GUILayout.Width(72)))
                    {
                        moviePlayer.PlaybackRate = -moviePlayer.PlaybackRate;
                    }

                    if (GUILayout.Button("-", GUILayout.Width(50)))
                    {
                        moviePlayer.PlaybackRate = moviePlayer.PlaybackRate * 0.5f;
                    }

                    if (GUILayout.Button("+", GUILayout.Width(50)))
                    {
                        moviePlayer.PlaybackRate = moviePlayer.PlaybackRate * 2.0f;
                    }

                    if (GUILayout.Button("Reset", GUILayout.Width(50)))
                    {
                        moviePlayer.PlaybackRate = 1.0f;
                    }

                    GUILayout.EndHorizontal();
                }
            }
        }

        GUILayout.EndVertical();
    }
Пример #9
0
 void Start()
 {
     _movie          = new AVProQuickTime();
     _movie.IsActive = true;
 }
Пример #10
0
    public override void OnInspectorGUI()
    {
        _movie = (this.target) as AVProQuickTimeMovie;

        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Load Options", EditorStyles.boldLabel);
        //DrawDefaultInspector();
        _movie._folder   = EditorGUILayout.TextField("Folder", _movie._folder);
        _movie._filename = EditorGUILayout.TextField("Filename", _movie._filename);

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Source");
        _movie._source = (AVProQuickTimePlugin.MovieSource)EditorGUILayout.EnumPopup(_movie._source);
        EditorGUILayout.EndHorizontal();
        _movie._allowYUV = EditorGUILayout.Toggle("Allow YUV", _movie._allowYUV);
        if (_movie._allowYUV)
        {
            _movie._useYUVHD = EditorGUILayout.Toggle("Use YUV Rec709", _movie._useYUVHD);
        }


        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Start Options", EditorStyles.boldLabel);
        _movie._loadOnStart = EditorGUILayout.Toggle("Load On Start", _movie._loadOnStart);
        _movie._playOnStart = EditorGUILayout.Toggle("Play On Start", _movie._playOnStart);
        //_movie._loadFirstFrame = EditorGUILayout.Toggle("Load First Frame", _movie._loadFirstFrame);

        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Playback Options", EditorStyles.boldLabel);
        _movie._loop = EditorGUILayout.Toggle("Loop", _movie._loop);

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Audio Volume");
        _movie._volume = EditorGUILayout.Slider(_movie._volume, 0.0f, 1.0f);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Audio Balance");
        _movie._audioBalance = EditorGUILayout.Slider(_movie._audioBalance, -1.0f, 1.0f);
        EditorGUILayout.EndHorizontal();


        GUILayout.Space(8.0f);

        AVProQuickTime media = _movie.MovieInstance;

        _movie._editorPreview = EditorGUILayout.Foldout(_movie._editorPreview, "Video Preview");

        if (_movie._editorPreview)
        {
            {
                Rect    textureRect = GUILayoutUtility.GetRect(64.0f, 64.0f, GUILayout.MinWidth(64.0f), GUILayout.MinHeight(64.0f));
                Texture texture     = _movie.OutputTexture;
                if (texture == null)
                {
                    texture = EditorGUIUtility.whiteTexture;
                }
                GUI.DrawTexture(textureRect, texture, ScaleMode.ScaleToFit);

                if (Application.isPlaying && media != null)
                {
                    GUILayout.Label(string.Format("{0}x{1} @ {2}fps {3} secs", media.Width, media.Height, media.FrameRate.ToString("F2"), media.DurationSeconds.ToString("F2")));
                }

                if (media != null && media.FramesTotal > 30)
                {
                    GUILayout.Label("Displaying at " + media.DisplayFPS.ToString("F1") + " fps");
                }
                else
                {
                    GUILayout.Label("Displaying at ... fps");
                }
            }

            if (Application.isPlaying)
            {
                if (media != null)
                {
                    GUILayout.Space(8.0f);

                    //EditorGUILayout.LabelField("Drawn:" + AVProQuickTimePlugin.GetNumFramesDrawn(_movie.MovieInstance.Handle));

                    EditorGUILayout.LabelField("Frame:");
                    uint currentFrame = media.Frame;
                    //Debug.Log(currentFrame);

                    int newFrame = EditorGUILayout.IntSlider((int)currentFrame, 0, (int)media.FrameCount);
                    if (newFrame != currentFrame)
                    {
                        media.Frame = (uint)newFrame;
                    }

                    if (!media.IsPlaying)
                    {
                        if (GUILayout.Button("Unpause Stream"))
                        {
                            _movie.Play();
                        }
                    }
                    else
                    {
                        if (GUILayout.Button("Pause Stream"))
                        {
                            _movie.Pause();
                        }
                    }

                    if (media.IsPlaying)
                    {
                        this.Repaint();
                    }
                }
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(_movie);
        }
    }
Пример #11
0
    public override void OnInspectorGUI()
    {
        _manager = (this.target) as AVProQuickTimeManager;

        if (!Application.isPlaying)
        {
            this.DrawDefaultInspector();
        }

        if (GUILayout.Button("Update"))
        {
            UpdateMovies();
        }

        if (_movies != null && _movies.Length > 0)
        {
            for (int i = 0; i < _movies.Length; i++)
            {
                GUILayout.BeginHorizontal();

                GUI.color = Color.white;
                if (!_movies[i].enabled ||
#if !AVPRO_UNITY_4_X
                    !_movies[i].gameObject.active
#else
                    !_movies[i].gameObject.activeInHierarchy
#endif
                    )
                {
                    GUI.color = Color.grey;
                }

                AVProQuickTime media = _movies[i].MovieInstance;
                if (media != null)
                {
                    GUI.color = Color.yellow;
                    if (media.IsPlaying)
                    {
                        GUI.color = Color.green;
                    }
                }

                if (GUILayout.Button("S"))
                {
                    Selection.activeObject = _movies[i];
                }
                GUILayout.Label(i.ToString("D2") + " " + _movies[i].name, GUILayout.MinWidth(128f));
                //GUILayout.FlexibleSpace();
                if (media != null)
                {
                    GUILayout.Label(media.Width + "x" + media.Height);
                    GUILayout.FlexibleSpace();
                    GUILayout.Label(string.Format("{0:00.0}", media.DisplayFPS) + " FPS");
                    //GUILayout.FlexibleSpace();
                }
                else
                {
                    GUILayout.FlexibleSpace();
                }



                GUILayout.EndHorizontal();

                if (media != null)
                {
                    GUILayout.HorizontalSlider(media.PositionSeconds, 0f, media.DurationSeconds, GUILayout.MinWidth(128f), GUILayout.ExpandWidth(true));
                }
            }

#if !AVPROQUICKTIME_UNITYFEATURE_EDITORAUTOREFRESH
            if (Application.isPlaying)
            {
                this.Repaint();
            }
#endif
        }
        else
        {
            if (Event.current.type.Equals(EventType.Repaint))
            {
                UpdateMovies();
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(_manager);
        }
    }
Пример #12
0
    private void ControlWindow(int id)
    {
        if (_movie == null)
        {
            return;
        }

        GUILayout.Space(16f);

        GUILayout.BeginVertical();

        _movie._useStreamingAssetsPath = GUILayout.Toggle(_movie._useStreamingAssetsPath, "Use Streaming Assets Folder");

        GUILayout.BeginHorizontal();
        GUILayout.Label("Folder: ", GUILayout.Width(80));
        _movie._folder = GUILayout.TextField(_movie._folder, 192);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("File: ", GUILayout.Width(80));
        _movie._filename = GUILayout.TextField(_movie._filename, 128, GUILayout.Width(350));
        if (GUILayout.Button("Load File", GUILayout.Width(90)))
        {
            _movie._source = AVProQuickTimePlugin.MovieSource.LocalFile;
            _movie.LoadMovie();
        }
        if (GUILayout.Button("Load URL", GUILayout.Width(90)))
        {
            _movie._source = AVProQuickTimePlugin.MovieSource.URL;
            _movie.LoadMovie();
        }
#if !UNITY_WEBPLAYER
        if (GUILayout.Button("Load Memory", GUILayout.Width(110)))
        {
            _movie._source = AVProQuickTimePlugin.MovieSource.Memory;
            string fullPath = System.IO.Path.Combine(_movie._folder, _movie._filename);
            if (System.IO.File.Exists(fullPath))
            {
                _movie._movieData = System.IO.File.ReadAllBytes(fullPath);
                _movie.LoadMovie();
                _movie._movieData = null;
            }
            System.GC.Collect();
            System.GC.WaitForPendingFinalizers();
            System.GC.Collect();
            Debug.Log("GC: " + System.GC.GetTotalMemory(false));
        }
#endif
        GUILayout.EndHorizontal();

        AVProQuickTime moviePlayer = _movie.MovieInstance;
        if (moviePlayer != null)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Loaded ", GUILayout.Width(80));
            GUILayout.HorizontalSlider(moviePlayer.LoadedSeconds, 0.0f, moviePlayer.DurationSeconds, GUILayout.Width(200));
            if (moviePlayer.DurationSeconds > 0f)
            {
                GUILayout.Label(((moviePlayer.LoadedSeconds * 100f) / moviePlayer.DurationSeconds) + "%");
            }
            else
            {
                GUILayout.Label("0%");
            }
            GUILayout.EndHorizontal();

            if (moviePlayer.LoadedSeconds > 0f || AVProQuickTimePlugin.IsMoviePlayable(moviePlayer.Handle))
            {
                GUILayout.Label("Resolution: " + moviePlayer.Width + "x" + moviePlayer.Height + " @ " + moviePlayer.FrameRate.ToString("F2") + "hz");


                GUILayout.BeginHorizontal();
                GUILayout.Label("Volume ", GUILayout.Width(80));
                float volume    = _movie._volume;
                float newVolume = GUILayout.HorizontalSlider(volume, 0.0f, 1.0f, GUILayout.Width(200));
                if (volume != newVolume)
                {
                    _movie._volume = newVolume;
                }
                GUILayout.Label(_movie._volume.ToString("F1"));
                GUILayout.EndHorizontal();


                GUILayout.BeginHorizontal();
                GUILayout.Label("Alpha", GUILayout.Width(80));
                _display._color.a = GUILayout.HorizontalSlider(_display._color.a, 0.0f, 1.0f, GUILayout.Width(200));
                GUILayout.Label(_display._color.a.ToString("F1"));
                GUILayout.EndHorizontal();


                GUILayout.BeginHorizontal();
                GUILayout.Label("Time ", GUILayout.Width(80));
                float position    = moviePlayer.PositionSeconds;
                float newPosition = GUILayout.HorizontalSlider(position, 0.0f, moviePlayer.DurationSeconds, GUILayout.Width(200));
                if (position != newPosition)
                {
                    moviePlayer.PositionSeconds = newPosition;
                    //moviePlayer.Play();
                    //moviePlayer.Update(true);
                }
                GUILayout.Label(moviePlayer.PositionSeconds.ToString("F2") + " / " + moviePlayer.DurationSeconds.ToString("F2") + "s");

                if (GUILayout.Button("Play"))
                {
                    moviePlayer.Play();
                }
                if (GUILayout.Button("Pause"))
                {
                    moviePlayer.Pause();
                }

                GUILayout.EndHorizontal();


                GUILayout.BeginHorizontal();

                GUILayout.Label("Frame " + moviePlayer.Frame.ToString() + " / " + moviePlayer.FrameCount.ToString());

                if (GUILayout.Button("<", GUILayout.Width(50)))
                {
                    AVProQuickTimePlugin.SeekToPreviousFrame(moviePlayer.Handle);
                }
                if (GUILayout.Button(">", GUILayout.Width(50)))
                {
                    AVProQuickTimePlugin.SeekToNextFrame(moviePlayer.Handle);
                }

                GUILayout.EndHorizontal();

                if (!moviePlayer.IsPaused)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label("Rate: " + moviePlayer.PlaybackRate.ToString("F2") + "x");

                    if (GUILayout.Button("Reverse", GUILayout.Width(72)))
                    {
                        moviePlayer.PlaybackRate = -moviePlayer.PlaybackRate;
                    }

                    if (GUILayout.Button("-", GUILayout.Width(50)))
                    {
                        moviePlayer.PlaybackRate = moviePlayer.PlaybackRate * 0.5f;
                    }

                    if (GUILayout.Button("+", GUILayout.Width(50)))
                    {
                        moviePlayer.PlaybackRate = moviePlayer.PlaybackRate * 2.0f;
                    }

                    if (GUILayout.Button("Reset", GUILayout.Width(50)))
                    {
                        moviePlayer.PlaybackRate = 1.0f;
                    }

                    GUILayout.EndHorizontal();
                }
            }
        }

        GUILayout.EndVertical();
    }
Пример #13
0
    public void ControlWindow(int id)
    {
        if (_demo == null)
        {
            return;
        }

        GUILayout.Space(16f);

        GUILayout.BeginVertical("box");


        AVProQuickTimeMovie movie = _demo.PlayingMovie;

        if (movie != null)
        {
            AVProQuickTime moviePlayer = movie.MovieInstance;
            if (moviePlayer != null)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label("Playing", GUILayout.Width(80));
                GUILayout.Label(movie._filename + " (" + moviePlayer.Width + "x" + moviePlayer.Height + " @ " + moviePlayer.FrameRate.ToString("F2") + ")");
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Time ", GUILayout.Width(80));
                GUILayout.HorizontalSlider(moviePlayer.PositionSeconds, 0.0f, moviePlayer.DurationSeconds, GUILayout.ExpandWidth(true));
                GUILayout.Label(moviePlayer.PositionSeconds.ToString("F1") + "/" + moviePlayer.DurationSeconds.ToString("F1") + "s", GUILayout.ExpandWidth(false));
                GUILayout.EndHorizontal();
            }
        }

        GUILayout.BeginHorizontal();
        //GUILayout.Space(80);
        GUILayout.Label(string.Empty, GUILayout.Width(80));
        if (GUILayout.Button("Prev"))
        {
            _demo.Previous();
        }

        if (_demo.IsPaused)
        {
            if (GUILayout.Button("Play"))
            {
                _demo.Unpause();
            }
        }
        else
        {
            if (GUILayout.Button("Pause"))
            {
                _demo.Pause();
            }
        }

        if (GUILayout.Button("Next"))
        {
            _demo.Next();
        }
        GUILayout.EndHorizontal();
        GUILayout.Space(32f);


        GUILayout.BeginHorizontal();
        GUILayout.Label("Folder: ", GUILayout.Width(80));
        _demo._folder = GUILayout.TextField(_demo._folder, 192);
        GUILayout.EndHorizontal();
        GUILayout.Space(32f);


        int removeIndex = -1;
        int cloneIndex  = -1;
        int upIndex     = -1;
        int downIndex   = -1;

        GUILayout.Label("Playlist");
        for (int movieIndex = 0; movieIndex < _demo._filenames.Count; movieIndex++)
        {
            Color prevBackCol = GUI.backgroundColor;
            if (movieIndex == _demo.PlayingItemIndex)
            {
                GUI.backgroundColor = Color.green;
            }

            GUILayout.BeginHorizontal();
            GUILayout.Label((movieIndex + 1).ToString(), GUILayout.Width(80));
            _demo._filenames[movieIndex] = GUILayout.TextField(_demo._filenames[movieIndex], 192, GUILayout.MinWidth(256f));
            if (GUILayout.Button("X", GUILayout.Width(24)))
            {
                removeIndex = movieIndex;
            }
            if (GUILayout.Button("Clone", GUILayout.Width(64)))
            {
                cloneIndex = movieIndex;
            }
            if (GUILayout.Button("Up", GUILayout.Width(32)))
            {
                upIndex = movieIndex;
            }
            if (GUILayout.Button("Down", GUILayout.Width(48)))
            {
                downIndex = movieIndex;
            }
            GUILayout.EndHorizontal();

            if (movieIndex == _demo.PlayingItemIndex)
            {
                GUI.backgroundColor = prevBackCol;
            }
        }

        if (removeIndex >= 0)
        {
            _demo._filenames.RemoveAt(removeIndex);
            removeIndex = -1;
        }
        if (cloneIndex >= 0)
        {
            _demo._filenames.Insert(cloneIndex + 1, _demo._filenames[cloneIndex]);
        }

        if (upIndex > 0)
        {
            int    indexA = upIndex - 1;
            int    indexB = upIndex;
            string old    = _demo._filenames[indexA];
            _demo._filenames[indexA] = _demo._filenames[indexB];
            _demo._filenames[indexB] = old;
        }
        if (downIndex > 0 && downIndex + 1 < _demo._filenames.Count)
        {
            int    indexA = downIndex + 1;
            int    indexB = downIndex;
            string old    = _demo._filenames[indexA];
            _demo._filenames[indexA] = _demo._filenames[indexB];
            _demo._filenames[indexB] = old;
        }

        if (GUILayout.Button("+"))
        {
            _demo._filenames.Add(string.Empty);
        }



        GUILayout.EndVertical();
    }
Пример #14
0
    public override void OnInspectorGUI()
    {
        _movie = (this.target) as AVProQuickTimeMovie;

        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Load Options", EditorStyles.boldLabel);
        //DrawDefaultInspector();
        _movie._useStreamingAssetsPath = EditorGUILayout.Toggle("Use StreamingAssets", _movie._useStreamingAssetsPath);
        _movie._folder   = EditorGUILayout.TextField("Folder", _movie._folder);
        _movie._filename = EditorGUILayout.TextField("Filename", _movie._filename);

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Source");
        _movie._source = (AVProQuickTimePlugin.MovieSource)EditorGUILayout.EnumPopup(_movie._source);
        EditorGUILayout.EndHorizontal();
        _movie._allowYUV = EditorGUILayout.Toggle("Allow YUV", _movie._allowYUV);
        if (_movie._allowYUV)
        {
            _movie._useYUVHD = EditorGUILayout.Toggle("Use YUV Rec709", _movie._useYUVHD);
        }

        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Performance", EditorStyles.boldLabel);
        _movie._ignoreFlips = EditorGUILayout.Toggle("Ignore Flips", _movie._ignoreFlips);


        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Start Options", EditorStyles.boldLabel);
        _movie._loadOnStart = EditorGUILayout.Toggle("Load On Start", _movie._loadOnStart);
        _movie._playOnStart = EditorGUILayout.Toggle("Play On Start", _movie._playOnStart);
        //_movie._loadFirstFrame = EditorGUILayout.Toggle("Load First Frame", _movie._loadFirstFrame);

        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Playback Options", EditorStyles.boldLabel);
        _movie._loop = EditorGUILayout.Toggle("Loop", _movie._loop);

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Audio Volume");
        _movie._volume = EditorGUILayout.Slider(_movie._volume, 0.0f, 1.0f);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Audio Balance");
        _movie._audioBalance = EditorGUILayout.Slider(_movie._audioBalance, -1.0f, 1.0f);
        EditorGUILayout.EndHorizontal();


        GUILayout.Space(8.0f);

        AVProQuickTime media = _movie.MovieInstance;

        GUI.enabled           = (_movie != null && _movie.MovieInstance != null);
        _movie._editorPreview = EditorGUILayout.Foldout(_movie._editorPreview, "Video Preview");

        GUI.enabled = true;
        if (_movie._editorPreview && _movie.MovieInstance != null)
        {
            {
                Texture texture = _movie.OutputTexture;
                if (texture == null)
                {
                    texture = EditorGUIUtility.whiteTexture;
                }

                float ratio = (float)texture.width / (float)texture.height;

                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                Rect textureRect = GUILayoutUtility.GetRect(Screen.width / 2, Screen.width / 2, (Screen.width / 2) / ratio, (Screen.width / 2) / ratio);
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();

                _showAlpha = GUILayout.Toggle(_showAlpha, "Show Alpha Channel");

                Matrix4x4 prevMatrix = GUI.matrix;
                if (_movie.MovieInstance.RequiresFlipY)
                {
                    GUIUtility.ScaleAroundPivot(new Vector2(1f, -1f), new Vector2(0, textureRect.y + (textureRect.height / 2)));
                }

                if (!_showAlpha)
                {
                    GUI.DrawTexture(textureRect, texture, ScaleMode.ScaleToFit);
                }
                else
                {
                    EditorGUI.DrawTextureAlpha(textureRect, texture, ScaleMode.ScaleToFit);
                }

                GUI.matrix = prevMatrix;

                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Select Texture", GUILayout.ExpandWidth(false)))
                {
                    Selection.activeObject = texture;
                }
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();

                if (Application.isPlaying && media != null)
                {
                    GUILayout.Label(string.Format("{0}x{1} @ {2}fps {3} secs", media.Width, media.Height, media.FrameRate.ToString("F2"), media.DurationSeconds.ToString("F2")));
                }

                if (media != null && media.FramesTotal > 30)
                {
                    GUILayout.Label("Displaying at " + media.DisplayFPS.ToString("F1") + " fps");
                }
                else
                {
                    GUILayout.Label("Displaying at ... fps");
                }
            }

            if (Application.isPlaying)
            {
                if (media != null)
                {
                    GUILayout.Space(8.0f);

                    //EditorGUILayout.LabelField("Drawn:" + AVProQuickTimePlugin.GetNumFramesDrawn(_movie.MovieInstance.Handle));

                    EditorGUILayout.LabelField("Frame:");
                    EditorGUILayout.BeginHorizontal();
                    if (GUILayout.Button("<", GUILayout.ExpandWidth(false)))
                    {
                        media.Frame--;
                    }
                    uint currentFrame = media.Frame;
                    if (currentFrame != uint.MaxValue)
                    {
                        int newFrame = EditorGUILayout.IntSlider((int)currentFrame, 0, (int)media.FrameCount);
                        if (newFrame != currentFrame)
                        {
                            media.Frame = (uint)newFrame;
                        }
                    }
                    if (GUILayout.Button(">", GUILayout.ExpandWidth(false)))
                    {
                        media.Frame++;
                    }
                    EditorGUILayout.EndHorizontal();

                    if (!media.IsPlaying)
                    {
                        if (GUILayout.Button("Unpause Stream"))
                        {
                            _movie.Play();
                        }
                    }
                    else
                    {
                        if (GUILayout.Button("Pause Stream"))
                        {
                            _movie.Pause();
                        }
                    }
#if !AVPROQUICKTIME_UNITYFEATURE_EDITORAUTOREFRESH
                    if (media.IsPlaying)
                    {
                        this.Repaint();
                    }
#endif
                }
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(_movie);
        }
    }
Пример #15
0
 void Start()
 {
     _movie = new AVProQuickTime();
     _movie.IsActive = true;
 }