public bool LoadMovieFromMemory(bool autoPlay, string name, System.IntPtr moviePointer, long movieLength, FilterMode textureFilterMode, TextureWrapMode textureWrapMode)
    {
        bool result = true;

        if (_moviePlayer == null)
        {
            _moviePlayer = new AVProWindowsMedia();
        }

        bool allowNativeFormat = (_colourFormat != ColourFormat.RGBA32);

        if (_moviePlayer.StartVideoFromMemory(name, moviePointer, movieLength, allowNativeFormat, _colourFormat == ColourFormat.YCbCr_HD, _allowAudio, _useAudioDelay, _useAudioMixer, _useDisplaySync, _ignoreFlips, textureFilterMode, textureWrapMode))
        {
            if (_allowAudio)
            {
                _moviePlayer.Volume       = _volume;
                _moviePlayer.AudioBalance = _audioBalance;
            }
            _moviePlayer.Loop = _loop;
            if (autoPlay)
            {
                _moviePlayer.Play();
            }
        }
        else
        {
            Debug.LogWarning("[AVProWindowsMedia] Couldn't load movie " + _filename);
            UnloadMovie();
            result = false;
        }

        return(result);
    }
示例#2
0
    public bool LoadMovieFromMemory(bool autoPlay, string name, System.IntPtr moviePointer, uint movieLength)
    {
        bool result = true;

        if (_moviePlayer == null)
        {
            _moviePlayer = new AVProWindowsMedia();
        }

        bool allowNativeFormat = (_colourFormat != ColourFormat.RGBA32);

        if (_moviePlayer.StartVideoFromMemory(name, moviePointer, movieLength, _loop, allowNativeFormat, _colourFormat == ColourFormat.YCbCr_HD))
        {
            _moviePlayer.Volume = _volume;
            if (autoPlay)
            {
                _moviePlayer.Play();
            }
        }
        else
        {
            Debug.LogWarning("[AVProWindowsMedia] Couldn't load movie " + _filename);
            UnloadMovie();
            result = false;
        }

        return(result);
    }
示例#3
0
 public void UnloadMovie()
 {
     if (_moviePlayer != null)
     {
         _moviePlayer.Dispose();
         _moviePlayer = null;
     }
 }
 void OnDestroy()
 {
     DestroyTextures();
     if (_movie != null)
     {
         _movie.Dispose();
         _movie = null;
     }
 }
示例#5
0
 void OnDestroy()
 {
     DestroyTextures();
     if (_movie != null)
     {
         _movie.Dispose();
         _movie = null;
     }
 }
示例#6
0
    private void DrawVideoControls(Rect area, AVProWindowsMediaGUIDisplay movieGUI)
    {
        AVProWindowsMediaMovie movie  = movieGUI._movie;
        AVProWindowsMedia      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();
    }
 public void LoadMovie(bool autoPlay)
 {
     if (_moviePlayer == null)
     {
         _moviePlayer = new AVProWindowsMedia();
     }
     if (_moviePlayer.StartVideo(_filename, _loop, _useNativeFormat))
     {
         _moviePlayer.Volume = _volume;
         if (autoPlay)
         {
             _moviePlayer.Play();
         }
     }
     else
     {
         Debug.LogWarning("Couldn't load movie " + _filename);
         UnloadMovie();
     }
 }
示例#8
0
    public bool LoadMovie(bool autoPlay)
    {
        bool result = true;

        if (_moviePlayer == null)
        {
            _moviePlayer = new AVProWindowsMedia();
        }

        bool allowNativeFormat = (_colourFormat != ColourFormat.RGBA32);

        string filePath = Path.Combine(_folder, _filename);

        // If we're running outside of the editor we may need to resolve the relative path
        // as the working-directory may not be that of the application EXE.
        if (!Application.isEditor && !Path.IsPathRooted(filePath))
        {
            string rootPath = Path.GetFullPath(Path.Combine(Application.dataPath, ".."));
            filePath = Path.Combine(rootPath, filePath);
        }

        if (_moviePlayer.StartVideo(filePath, _loop, allowNativeFormat, _colourFormat == ColourFormat.YCbCr_HD))
        {
            _moviePlayer.Volume = _volume;
            if (autoPlay)
            {
                _moviePlayer.Play();
            }
        }
        else
        {
            Debug.LogWarning("[AVProWindowsMedia] Couldn't load movie " + _filename);
            UnloadMovie();
            result = false;
        }

        return(result);
    }
    public virtual bool LoadMovie(bool autoPlay)
    {
        bool result = true;

        if (_moviePlayer == null)
        {
            _moviePlayer = new AVProWindowsMedia();
        }

        LoadClips();

        bool allowNativeFormat = (_colourFormat != ColourFormat.RGBA32);

        //string filePath = GetFilePath();
        string filePath = ConfigFile.Cconfig.VediofullPathName;

        if (_moviePlayer.StartVideo(filePath, allowNativeFormat, _colourFormat == ColourFormat.YCbCr_HD, _allowAudio, _useAudioDelay, _useAudioMixer, _useDisplaySync, _ignoreFlips, _textureFilterMode, _textureWrapMode))
        {
            if (_allowAudio)
            {
                _moviePlayer.Volume       = _volume;
                _moviePlayer.AudioBalance = _audioBalance;
            }
            _moviePlayer.Loop = _loop;
            if (autoPlay)
            {
                _moviePlayer.Play();
            }
        }
        else
        {
            Debug.LogWarning("[AVProWindowsMedia] Couldn't load movie " + _filename);
            UnloadMovie();
            result = false;
        }

        return(result);
    }
    public virtual bool LoadMovie(bool autoPlay)
    {
        bool result = true;

        if (_moviePlayer == null)
            _moviePlayer = new AVProWindowsMedia();

        LoadClips();

        bool allowNativeFormat = (_colourFormat != ColourFormat.RGBA32);

        string filePath = GetFilePath();

        if (_moviePlayer.StartVideo(filePath, allowNativeFormat, _colourFormat == ColourFormat.YCbCr_HD, _allowAudio, _useAudioDelay, _useAudioMixer, _useDisplaySync, _ignoreFlips, _textureFilterMode, _textureWrapMode))
        {
            _moviePlayer.Volume = _volume;
            _moviePlayer.Loop = _loop;
            if (autoPlay)
            {
                _moviePlayer.Play();
            }
        }
        else
        {
            Debug.LogWarning("[AVProWindowsMedia] Couldn't load movie " + _filename);
            UnloadMovie();
            result = false;
        }

        return result;
    }
示例#11
0
 void Start()
 {
     _movie = new AVProWindowsMedia();
 }
    public 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(440));
        if (GUILayout.Button("Load File", GUILayout.Width(90)))
        {
            _movie.LoadMovie(true);
        }
        GUILayout.EndHorizontal();

        bool alphaBlend = _movie._colourFormat == AVProWindowsMediaMovie.ColourFormat.RGBA32;

        if (alphaBlend)
        {
            alphaBlend = GUILayout.Toggle(alphaBlend, "Render with Transparency (requires movie reload)");
        }
        else
        {
            alphaBlend = GUILayout.Toggle(alphaBlend, "Render without Transparency");
        }

        if (alphaBlend)
        {
            _movie._colourFormat = AVProWindowsMediaMovie.ColourFormat.RGBA32;
        }
        else
        {
            _movie._colourFormat = AVProWindowsMediaMovie.ColourFormat.YCbCr_HD;
        }


        AVProWindowsMedia moviePlayer = _movie.MovieInstance;

        if (moviePlayer != null)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Info:", GUILayout.Width(80f));
            GUILayout.Label(moviePlayer.Width + "x" + moviePlayer.Height + " @ " + moviePlayer.FrameRate.ToString("F2") + " FPS");
            GUILayout.EndHorizontal();

            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("Balance ", GUILayout.Width(80));
            float balance    = moviePlayer.AudioBalance;
            float newBalance = GUILayout.HorizontalSlider(balance, -1.0f, 1.0f, GUILayout.Width(200));
            if (balance != newBalance)
            {
                moviePlayer.AudioBalance = newBalance;
            }
            GUILayout.Label(moviePlayer.AudioBalance.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", GUILayout.Width(80f));
            GUILayout.Label(moviePlayer.PositionFrames.ToString() + " / " + moviePlayer.DurationFrames.ToString());

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

            GUILayout.EndHorizontal();



            GUILayout.BeginHorizontal();
            GUILayout.Label("Rate ", GUILayout.Width(80f));
            GUILayout.Label(moviePlayer.PlaybackRate.ToString("F2") + "x");
            if (GUILayout.Button("-", GUILayout.Width(50)))
            {
                moviePlayer.PlaybackRate = moviePlayer.PlaybackRate * 0.5f;
            }

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

        GUILayout.EndVertical();
    }
示例#13
0
 void Start()
 {
     _movie = new AVProWindowsMedia();
 }
    public void ControlWindow(int id)
    {
        if (_demo == null)
        {
            return;
        }

        GUILayout.Space(16f);

        GUILayout.BeginVertical("box");


        AVProWindowsMediaMovie movie = _demo.PlayingMovie;

        if (movie != null)
        {
            AVProWindowsMedia 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();
    }
    public bool LoadMovieFromMemory(bool autoPlay, string name, System.IntPtr moviePointer, long movieLength, FilterMode textureFilterMode, TextureWrapMode textureWrapMode)
    {
        bool result = true;

        if (_moviePlayer == null)
            _moviePlayer = new AVProWindowsMedia();

        bool allowNativeFormat = (_colourFormat != ColourFormat.RGBA32);

        if (_moviePlayer.StartVideoFromMemory(name, moviePointer, movieLength, allowNativeFormat, _colourFormat == ColourFormat.YCbCr_HD, _allowAudio, _useAudioDelay, _useAudioMixer, _useDisplaySync, _ignoreFlips, textureFilterMode, textureWrapMode))
        {
            _moviePlayer.Volume = _volume;
            if (autoPlay)
            {
                _moviePlayer.Play();
            }
        }
        else
        {
            Debug.LogWarning("[AVProWindowsMedia] Couldn't load movie " + _filename);
            UnloadMovie();
            result = false;
        }

        return result;
    }
示例#16
0
    public override void OnInspectorGUI()
    {
        _movie = (this.target) as AVProWindowsMediaMovie;

        //DrawDefaultInspector();
        _movie._folder   = EditorGUILayout.TextField("Folder", _movie._folder);
        _movie._filename = EditorGUILayout.TextField("Filename", _movie._filename);



        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Colour Format");
        _movie._colourFormat = (AVProWindowsMediaMovie.ColourFormat)EditorGUILayout.EnumPopup(_movie._colourFormat);
        EditorGUILayout.EndHorizontal();

        _movie._loop        = EditorGUILayout.Toggle("Loop", _movie._loop);
        _movie._loadOnStart = EditorGUILayout.Toggle("Load On Start", _movie._loadOnStart);
        _movie._playOnStart = EditorGUILayout.Toggle("Play On Start", _movie._playOnStart);
        //_movie._editorPreview = EditorGUILayout.Toggle("Editor Preview", _movie._editorPreview);

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


        GUILayout.Space(8.0f);

        AVProWindowsMedia media = _movie.MovieInstance;

        if (media != null)
        {
            _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.FramesTotal > 30)
                    {
                        GUILayout.Label("Displaying at " + media.DisplayFPS.ToString("F1") + " fps");
                    }
                    else
                    {
                        GUILayout.Label("Displaying at ... fps");
                    }
                }

                if (Application.isPlaying && _movie.enabled)
                {
                    if (media != null)
                    {
                        GUILayout.Space(8.0f);
                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.PrefixLabel("Audio Balance");
                        media.AudioBalance = EditorGUILayout.Slider(media.AudioBalance, -1.0f, 1.0f);
                        EditorGUILayout.EndHorizontal();

                        EditorGUILayout.LabelField("Frame:");
                        uint currentFrame = media.PositionFrames;
                        int  newFrame     = EditorGUILayout.IntSlider((int)currentFrame, 0, (int)media.DurationFrames);
                        if (newFrame != currentFrame)
                        {
                            media.PositionFrames = (uint)newFrame;
                        }

                        if (!media.IsPlaying)
                        {
                            if (GUILayout.Button("Unpause Stream"))
                            {
                                _movie.Play();
                            }
                        }
                        else
                        {
                            if (GUILayout.Button("Pause Stream"))
                            {
                                _movie.Pause();
                            }
                        }
                        if (_movie._editorPreview && media.IsPlaying)
                        {
                            UnityEditor.HandleUtility.Repaint();
                        }
                    }
                }
            }
        }
    }
 public virtual void UnloadMovie()
 {
     if (_moviePlayer != null)
     {
         _moviePlayer.Dispose();
         _moviePlayer = null;
     }
 }
    public override void OnInspectorGUI()
    {
        _movie = (this.target) as AVProWindowsMediaMovie;

        EditorGUILayout.Separator();
        GUILayout.Label("File Location", 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);

        GUILayout.BeginHorizontal();
        GUI.enabled = System.IO.File.Exists(_movie.GetFilePath());

#if UNITY_EDITOR_WIN
        if (GUILayout.Button("Show"))
        {
            ShowInExplorer(_movie.GetFilePath());
        }
#endif
        GUI.enabled &= _movie._useStreamingAssetsPath;

        if (GUILayout.Button("Select"))
        {
            string projectRoot = System.IO.Path.GetFullPath(System.IO.Path.Combine(Application.dataPath, ".."));
            projectRoot = projectRoot.Replace('\\', '/');

            string path = _movie.GetFilePath();
            path = path.Remove(0, projectRoot.Length + 1);

            Selection.activeObject = AssetDatabase.LoadMainAssetAtPath(path);
        }
        GUILayout.EndHorizontal();
        GUI.enabled = true;

        GUI.color = Color.green;
        if (GUILayout.Button("BROWSE"))
        {
            Browse(Application.streamingAssetsPath, ref _movie._filename, ref _movie._folder, ref _movie._useStreamingAssetsPath);
        }
        GUI.color = Color.white;

        if (string.IsNullOrEmpty(_movie.GetFilePath()))
        {
            if (_movie._loadOnStart)
            {
                GUI.color = Color.red;
                GUILayout.TextArea("Error: No file specfied");
                GUI.color = Color.white;
            }
            else
            {
                GUI.color = Color.yellow;
                GUILayout.TextArea("Warning: No file specfied");
                GUI.color = Color.white;
            }
        }
        else if (!System.IO.File.Exists(_movie.GetFilePath()))
        {
            GUI.color = Color.red;
            GUILayout.TextArea("Error: File not found");
            GUI.color = Color.white;
        }
        else
        {
            if (!_movie._useStreamingAssetsPath)
            {
                GUI.color = Color.yellow;
                GUILayout.TextArea("Warning: Files not in StreamingAssets will require manual copying for builds");
                GUI.color = Color.white;
            }
        }
        if (System.IO.Path.IsPathRooted(_movie._folder))
        {
            GUI.color = Color.yellow;
            GUILayout.TextArea("Warning: Absolute path is not ideal.  Better to use files relative to the project root");
            GUI.color = Color.white;
        }

        GUILayout.Space(10f);

        EditorGUILayout.Separator();
        GUILayout.Label("Load Options", EditorStyles.boldLabel);

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Colour Format");
        _movie._colourFormat = (AVProWindowsMediaMovie.ColourFormat)EditorGUILayout.EnumPopup(_movie._colourFormat);
        EditorGUILayout.EndHorizontal();
        _movie._useDisplaySync = EditorGUILayout.Toggle("Use Display Sync", _movie._useDisplaySync);

        if (_movie._useDisplaySync)
        {
            if (
#if UNITY_5
                PlayerSettings.d3d11FullscreenMode != D3D11FullscreenMode.ExclusiveMode ||
#endif
                PlayerSettings.d3d9FullscreenMode != D3D9FullscreenMode.ExclusiveMode)
            {
                GUI.color = Color.cyan;
                GUILayout.TextArea("Perf: For display sync fullscreen mode should be set to EXCLUSIVE in Player Settings");
                GUI.color = Color.white;
            }
            if (QualitySettings.vSyncCount != 1 && QualitySettings.vSyncCount != 2)
            {
                GUI.color = Color.cyan;
                GUILayout.TextArea("Perf: For display sync vsync must be set to 1 or 2 in Quality Settings");
                GUI.color = Color.white;
            }
        }

        _movie._allowAudio = EditorGUILayout.Toggle("Allow Audio", _movie._allowAudio);
        GUI.enabled        = _movie._allowAudio;
        {
            _movie._useAudioDelay = EditorGUILayout.Toggle("Use Audio Delay", _movie._useAudioDelay);
            _movie._useAudioMixer = EditorGUILayout.Toggle("Use Audio Mixer", _movie._useAudioMixer);
        }
        GUI.enabled = true;

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Texture Filter");
        _movie._textureFilterMode = (FilterMode)EditorGUILayout.EnumPopup(_movie._textureFilterMode);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Texture Wrap");
        _movie._textureWrapMode = (TextureWrapMode)EditorGUILayout.EnumPopup(_movie._textureWrapMode);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Start Options", EditorStyles.boldLabel);
        _movie._loadOnStart = EditorGUILayout.Toggle("Load On Start", _movie._loadOnStart);
        GUI.enabled         = _movie._loadOnStart;
        if (!_movie._loadOnStart)
        {
            _movie._playOnStart = false;
        }
        _movie._playOnStart = EditorGUILayout.Toggle("Play On Start", _movie._playOnStart);
        GUI.enabled         = true;
        EditorGUILayout.Separator();
        EditorGUILayout.Separator();

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

        EditorGUILayout.Separator();
        GUILayout.Label("Playback", EditorStyles.boldLabel);

        _movie._loop = EditorGUILayout.Toggle("Loop", _movie._loop);
        //_movie._editorPreview = EditorGUILayout.Toggle("Editor Preview", _movie._editorPreview);

        GUI.enabled = _movie._allowAudio;
        {
            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();
        }
        GUI.enabled = true;

        GUILayout.Space(8.0f);

        SerializedProperty tps = serializedObject.FindProperty("_clips");
        EditorGUI.BeginChangeCheck();
        EditorGUILayout.PropertyField(tps, new GUIContent("Clips"), true);
        if (EditorGUI.EndChangeCheck())
        {
            serializedObject.ApplyModifiedProperties();
        }

        GUILayout.Space(8.0f);

        if (!Application.isPlaying)
        {
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Load"))
            {
                if (AVProWindowsMediaManager.Instance != null)
                {
                    _movie.LoadMovie(_movie._playOnStart);
                }
            }

#if UNITY_5 && !UNITY_5_0 && !UNITY_5_1 && !UNITY_5_2 && !UNITY_5_3
            using (var scope = new EditorGUI.DisabledScope(_movie.MovieInstance == null))
#else
            EditorGUI.BeginDisabledGroup(_movie.MovieInstance == null);
#endif
            {
                if (GUILayout.Button("Unload"))
                {
                    _movie.UnloadMovie();
                }
            }
#if UNITY_5 && !UNITY_5_0 && !UNITY_5_1 && !UNITY_5_2 && !UNITY_5_3
#else
            EditorGUI.EndDisabledGroup();
#endif

            EditorGUILayout.EndHorizontal();
        }

        AVProWindowsMedia media = _movie.MovieInstance;
        if (media != null)
        {
            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();

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

                    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();

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    GUILayout.Label(string.Format("{0}x{1} @ {2}fps {3} secs", media.Width, media.Height, media.FrameRate.ToString("F2"), media.DurationSeconds.ToString("F2")));
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    if (media.FramesTotal > 30)
                    {
                        GUILayout.Label("Displaying at " + media.DisplayFPS.ToString("F1") + " fps");
                    }
                    else
                    {
                        GUILayout.Label("Displaying at ... fps");
                    }
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();
                }

                if (_movie.enabled)
                {
                    GUILayout.Space(8.0f);

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

                    if (_movie.NumClips > 0)
                    {
                        EditorGUILayout.Separator();
                        EditorGUILayout.LabelField("Clips", EditorStyles.boldLabel);
                        for (int i = 0; i < _movie.NumClips; i++)
                        {
                            GUILayout.BeginHorizontal();
                            string clipName = _movie.GetClipName(i);
                            GUILayout.Label(clipName);
                            if (GUILayout.Button("Loop"))
                            {
                                _movie.PlayClip(clipName, true, false);
                            }
                            GUILayout.EndHorizontal();
                        }
                        if (GUILayout.Button("Reset Clip"))
                        {
                            _movie.ResetClip();
                        }
                        EditorGUILayout.Separator();
                    }

                    EditorGUILayout.BeginHorizontal();
                    if (GUILayout.Button("Rewind"))
                    {
                        _movie.MovieInstance.Rewind();
                    }

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

#if !AVPROWINDOWSMEDIA_UNITYFEATURE_EDITORAUTOREFRESH
                    this.Repaint();
#endif
                }
            }
        }
        if (GUI.changed)
        {
            EditorUtility.SetDirty(_movie);
        }

        // If the app isn't running but the media is we may need to manually update it
        if (!Application.isPlaying && _movie.MovieInstance != null)
        {
            _movie.Update();
            AVProWindowsMediaManager.Instance.Update();
            EditorUtility.SetDirty(_movie);
        }
    }
    public void ControlWindow(int id)
    {
        if (_movie == null)
        {
            return;
        }

        GUILayout.Space(16f);

        GUILayout.BeginVertical();

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

        GUILayout.BeginHorizontal();
        GUILayout.Label("File: ", GUILayout.Width(100));
        _movie._filename = GUILayout.TextField(_movie._filename, 128, GUILayout.Width(440));
        if (GUILayout.Button("Load File", GUILayout.Width(90)))
        {
            if (!_playFromMemory)
            {
                _movie.LoadMovie(true);
            }
            else
            {
                LoadFileToMemory(_movie._folder, _movie._filename);
            }
        }
        GUILayout.EndHorizontal();


        if (_display != null)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Space(100f);

            /*if (_display._alphaBlend)
             *      _display._alphaBlend = GUILayout.Toggle(_display._alphaBlend, "Rendering with Transparency");
             * else
             * _display._alphaBlend = GUILayout.Toggle(_display._alphaBlend, "Rendering without Transparency");*/

            if (_display._alphaBlend != GUILayout.Toggle(_display._alphaBlend, "Render with Transparency"))
            {
                _display._alphaBlend = !_display._alphaBlend;
                if (_display._alphaBlend)
                {
                    _movie._colourFormat = AVProWindowsMediaMovie.ColourFormat.RGBA32;
                }
                else
                {
                    _movie._colourFormat = AVProWindowsMediaMovie.ColourFormat.YCbCr_HD;
                }

                if (!_playFromMemory)
                {
                    _movie.LoadMovie(true);
                }
                else
                {
                    LoadFileToMemory(_movie._folder, _movie._filename);
                }
            }



            if (_playFromMemory != GUILayout.Toggle(_playFromMemory, "Play from Memory"))
            {
                _playFromMemory = !_playFromMemory;
                if (_movie.MovieInstance != null)
                {
                    if (!_playFromMemory)
                    {
                        _movie.LoadMovie(true);
                    }
                    else
                    {
                        LoadFileToMemory(_movie._folder, _movie._filename);
                    }
                }
            }

            GUILayout.EndHorizontal();
        }

        AVProWindowsMedia moviePlayer = _movie.MovieInstance;

        if (moviePlayer != null)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Info:", GUILayout.Width(100f));
            GUILayout.Label(moviePlayer.Width + "x" + moviePlayer.Height + " @ " + moviePlayer.FrameRate.ToString("F2") + " FPS");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Volume ", GUILayout.Width(100));
            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("Balance ", GUILayout.Width(100));
            float balance    = _movie._audioBalance;
            float newBalance = GUILayout.HorizontalSlider(balance, -1.0f, 1.0f, GUILayout.Width(200));
            if (balance != newBalance)
            {
                _movie._audioBalance = newBalance;
            }
            GUILayout.Label(moviePlayer.AudioBalance.ToString("F1"));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Audio Delay", GUILayout.Width(100));
            int delay    = moviePlayer.AudioDelay;
            int newDelay = Mathf.FloorToInt(GUILayout.HorizontalSlider(delay, -1000.0f, 1000.0f, GUILayout.Width(200)));
            if (delay != newDelay)
            {
                moviePlayer.AudioDelay = newDelay;
            }
            float msPerFrame = 1000.0f / moviePlayer.FrameRate;
            int   frameDelay = Mathf.FloorToInt((float)newDelay / msPerFrame);
            GUILayout.Label(moviePlayer.AudioDelay.ToString() + "ms (" + frameDelay + " frames)");
            GUILayout.EndHorizontal();



            GUILayout.BeginHorizontal();
            GUILayout.Label("Time ", GUILayout.Width(100));
            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("F2") + " / " + moviePlayer.DurationSeconds.ToString("F3") + "s");

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


            GUILayout.BeginHorizontal();
            GUILayout.Label("Frame", GUILayout.Width(100f));

            uint positionFrame = moviePlayer.PositionFrames;
            if (positionFrame != uint.MaxValue)
            {
                uint newPositionFrame = (uint)GUILayout.HorizontalSlider(positionFrame, 0.0f, (float)moviePlayer.LastFrame, GUILayout.Width(200));
                if (positionFrame != newPositionFrame)
                {
                    moviePlayer.PositionFrames = newPositionFrame;
                }

                GUILayout.Label(moviePlayer.PositionFrames.ToString() + " / " + moviePlayer.LastFrame.ToString());

                if (GUILayout.RepeatButton("<", GUILayout.Width(50)))
                {
                    if (moviePlayer.PositionFrames > 0)
                    {
                        moviePlayer.PositionFrames--;
                    }
                }
                if (GUILayout.RepeatButton(">", GUILayout.Width(50)))
                {
                    if (moviePlayer.PositionFrames < moviePlayer.LastFrame)
                    {
                        moviePlayer.PositionFrames++;
                    }
                }

                GUILayout.EndHorizontal();
            }



            GUILayout.BeginHorizontal();
            GUILayout.Label("Rate ", GUILayout.Width(100f));
            GUILayout.Label(moviePlayer.PlaybackRate.ToString("F2") + "x");
            if (GUILayout.Button("-", GUILayout.Width(50)))
            {
                moviePlayer.PlaybackRate = moviePlayer.PlaybackRate * 0.5f;
            }

            if (GUILayout.Button("+", GUILayout.Width(50)))
            {
                moviePlayer.PlaybackRate = moviePlayer.PlaybackRate * 2.0f;
            }
            GUILayout.EndHorizontal();
#if UNITY_EDITOR
            GUILayout.Label("Displaying at " + moviePlayer.DisplayFPS.ToString("F1") + " fps");
#endif
        }

        GUILayout.EndVertical();
    }
示例#20
0
    public override void OnInspectorGUI()
    {
        _manager = (this.target) as AVProWindowsMediaManager;

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

        /*if (!Application.isPlaying)
         * {
         *      _manager._useExternalTextures = GUILayout.Toggle(_manager._useExternalTextures, "Use External Textures (beta)");
         * }*/

        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 || !_movies[i].gameObject.activeInHierarchy)
                {
                    GUI.color = Color.grey;
                }

                AVProWindowsMedia 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));
                }
            }
        }
        else
        {
            if (Event.current.type.Equals(EventType.Repaint))
            {
                UpdateMovies();
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(_manager);
        }
    }