public void UnloadMovie() { if (_moviePlayer != null) { _moviePlayer.Dispose(); _moviePlayer = null; } }
void OnDestroy() { DestroyTextures(); if (_movie != null) { _movie.Dispose(); _movie = null; } }
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(); }
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); }
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; }
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(); }
void Start() { _movie = new AVProQuickTime(); _movie.IsActive = true; }
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); } }
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); } }
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(); }
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(); }
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); } }