public IEnumerator CreatePlayableAsset() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestSISTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); //Test the track immediately StreamingImageSequenceTrack track = clip.GetParentTrack() as StreamingImageSequenceTrack; Assert.IsNotNull(track); Assert.IsNotNull(track.GetActivePlayableAsset()); yield return(null); int numImages = sisAsset.GetNumImages(); Assert.IsTrue(numImages > 0); //Test that there should be no active PlayableAsset at the time above what exists in the track. director.time = clip.start + clip.duration + 1; yield return(null); Assert.IsNull(track.GetActivePlayableAsset()); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator ShowFrameMarkers() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); yield return(null); //Show TimelineClipSISData timelineClipSISData = sisAsset.GetBoundTimelineClipSISData(); TrackAsset trackAsset = clip.parentTrack; timelineClipSISData.RequestFrameMarkers(true, true); TimelineEditor.Refresh(RefreshReason.ContentsModified); yield return(null); Assert.AreEqual(TimelineUtility.CalculateNumFrames(clip), trackAsset.GetMarkerCount()); yield return(null); //Undo showing FrameMarkers EditorUtilityTest.UndoAndRefreshTimelineEditor(); yield return(null); Assert.False(timelineClipSISData.AreFrameMarkersRequested()); Assert.AreEqual(0, trackAsset.GetMarkerCount()); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator ResizePlayableAsset() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestSISTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); yield return(null); SISClipData clipData = sisAsset.GetBoundClipData(); Assert.IsNotNull(clipData); clipData.RequestFrameMarkers(true, true); Undo.IncrementCurrentGroup(); //the base of undo is here. FrameMarkerVisibility is still true after undo TimelineEditor.Refresh(RefreshReason.ContentsModified); yield return(null); //Original length TrackAsset trackAsset = clip.GetParentTrack(); Assert.AreEqual(TimelineUtility.CalculateNumFrames(clip), trackAsset.GetMarkerCount()); double origClipDuration = clip.duration; //Resize longer EditorUtilityTest.ResizeSISTimelineClip(clip, origClipDuration + 3.0f); yield return(null); Assert.AreEqual(TimelineUtility.CalculateNumFrames(clip), trackAsset.GetMarkerCount()); //Undo EditorUtilityTest.UndoAndRefreshTimelineEditor(); yield return(null); Assert.AreEqual(origClipDuration, clip.duration); Assert.AreEqual(TimelineUtility.CalculateNumFrames(clip), trackAsset.GetMarkerCount()); //Resize shorter EditorUtilityTest.ResizeSISTimelineClip(clip, Mathf.Max(0.1f, ((float)(origClipDuration) - 3.0f))); yield return(null); Assert.AreEqual(TimelineUtility.CalculateNumFrames(clip), trackAsset.GetMarkerCount()); //Undo EditorUtilityTest.UndoAndRefreshTimelineEditor(); yield return(null); Assert.AreEqual(origClipDuration, clip.duration); Assert.AreEqual(TimelineUtility.CalculateNumFrames(clip), trackAsset.GetMarkerCount()); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator CreatePlayableAsset() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestRenderCacheTimelineClip(director); RenderCachePlayableAsset renderCachePlayableAsset = clip.asset as RenderCachePlayableAsset; Assert.IsNotNull(renderCachePlayableAsset); //Test the track immediately RenderCacheTrack track = clip.GetParentTrack() as RenderCacheTrack; Assert.IsNotNull(track); yield return(null); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator ReloadPlayableAsset() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestSISTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); string folder = sisAsset.GetFolder(); Assert.IsNotNull(folder); int numOriginalImages = sisAsset.GetNumImages(); Assert.Greater(numOriginalImages, 0); List <WatchedFileInfo> testImages = sisAsset.FindImages(folder); List <string> copiedImagePaths = new List <string>(testImages.Count); foreach (WatchedFileInfo imageFile in testImages) { string fileName = imageFile.GetName(); string src = Path.Combine(folder, fileName); string dest = Path.Combine(folder, "Copied_" + fileName); File.Copy(src, dest, true); copiedImagePaths.Add(dest); } yield return(null); sisAsset.Reload(); yield return(null); Assert.AreEqual(numOriginalImages * 2, sisAsset.GetNumImages()); //Cleanup foreach (string imagePath in copiedImagePaths) { File.Delete(imagePath); } EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator ResetFrameMarkers() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestSISTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); yield return(null); SISClipData clipData = sisAsset.GetBoundClipData(); Assert.IsNotNull(clipData); clipData.RequestFrameMarkers(true); yield return(null); //Change image to false StreamingImageSequenceTrack track = clip.GetParentTrack() as StreamingImageSequenceTrack; Assert.IsNotNull(track); foreach (var m in track.GetMarkers()) { FrameMarker marker = m as FrameMarker; Assert.IsNotNull(marker); marker.SetFrameUsed(false); UnityEngine.Assertions.Assert.IsFalse(marker.IsFrameUsed()); } yield return(null); sisAsset.ResetPlayableFrames(); yield return(null); //Check if all markers have been reset to used foreach (var m in track.GetMarkers()) { FrameMarker marker = m as FrameMarker; Assert.IsNotNull(marker); UnityEngine.Assertions.Assert.IsTrue(marker.IsFrameUsed()); } yield return(null); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator SetPlayableAssetFPS() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestSISTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); //Make sure that we have some images int numImages = sisAsset.GetNumImages(); Assert.IsTrue(numImages > 0); yield return(null); //Set animationCurve with half speed SISClipData sisClipData = sisAsset.GetBoundClipData(); Assert.IsNotNull(sisClipData); float origCurveDuration = sisClipData.CalculateCurveDuration(); AnimationCurve halfSpeedCurve = AnimationCurve.Linear(0, 0, origCurveDuration * 2, 1.0f); AnimationUtility.SetEditorCurve(clip.curves, StreamingImageSequencePlayableAsset.GetTimeCurveBinding(), halfSpeedCurve); yield return(null); float origFPS = SISPlayableAssetUtility.CalculateFPS(sisAsset); float origDuration = (float)clip.duration; float origTimeScale = (float)clip.timeScale; SetFPSAndCheck(sisAsset, origFPS * 8.0f); SetFPSAndCheck(sisAsset, origFPS / 16.0f); SetFPSAndCheck(sisAsset, origFPS * 0.25f); SetFPSAndCheck(sisAsset, origFPS * 4.0f); SetFPSAndCheck(sisAsset, origFPS); yield return(null); //Check if we are back Assert.IsTrue(Mathf.Approximately(origFPS, SISPlayableAssetUtility.CalculateFPS(sisAsset))); Assert.IsTrue(Mathf.Approximately(origDuration, (float)clip.duration)); Assert.IsTrue(Mathf.Approximately(origTimeScale, (float)clip.timeScale)); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator ImportFromStreamingAssets() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestSISTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); //Copy test data to streamingAssetsPath const string DEST_FOLDER_NAME = "ImportFromStreamingAssetsTest"; string streamingAssetsFolder = AssetUtility.NormalizeAssetPath(Application.streamingAssetsPath); string destFolderGUID = AssetDatabase.CreateFolder(streamingAssetsFolder, DEST_FOLDER_NAME); string destFolder = AssetDatabase.GUIDToAssetPath(destFolderGUID); int numImages = sisAsset.GetNumImages(); for (int i = 0; i < numImages; ++i) { string src = sisAsset.GetImageFilePath(i); Assert.IsNotNull(src); string dest = Path.Combine(destFolder, Path.GetFileName(src)); File.Copy(src, dest, true); } AssetDatabase.Refresh(); yield return(null); ImageSequenceImporter.ImportImages(destFolder, sisAsset); yield return(null); Assert.AreEqual(destFolder, sisAsset.GetFolder()); //Cleanup AssetDatabase.DeleteAsset(destFolder); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator UpdateRenderCachePNGInStreamingAssets() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestRenderCacheTimelineClip(director); TimelineAsset timelineAsset = director.playableAsset as TimelineAsset; RenderCachePlayableAsset renderCachePlayableAsset = clip.asset as RenderCachePlayableAsset; RenderCacheTrack track = clip.GetParentTrack() as RenderCacheTrack; Assert.IsNotNull(timelineAsset); Assert.IsNotNull(renderCachePlayableAsset); Assert.IsNotNull(track); Assert.IsNotNull(Camera.main); yield return(null); clip.duration = (1.0f / timelineAsset.editorSettings.GetFPS()); const string OUTPUT_FOLDER = "Asset/StreamingAssets/RenderCachePNGForTestRunner"; Directory.CreateDirectory(OUTPUT_FOLDER); renderCachePlayableAsset.SetFolder(OUTPUT_FOLDER); GameObject cameraRenderCapturerGO = new GameObject(); CameraRenderCapturer cameraRenderCapturer = cameraRenderCapturerGO.AddComponent <CameraRenderCapturer>(); cameraRenderCapturer.SetCamera(Camera.main); director.SetGenericBinding(track, cameraRenderCapturer); yield return(null); //Update RenderCache EditorCoroutineUtility.StartCoroutineOwnerless( RenderCachePlayableAssetInspector.UpdateRenderCacheCoroutine(director, renderCachePlayableAsset) ); //A hack to wait until the coroutine is finished const float TIMEOUT_SEC = 3.0f; Assert.IsTrue(Directory.Exists(OUTPUT_FOLDER)); float prevTime = Time.realtimeSinceStartup; while (Time.realtimeSinceStartup - prevTime < TIMEOUT_SEC) { yield return(null); } string imageFilePath = renderCachePlayableAsset.GetImageFilePath(0); Assert.IsTrue(File.Exists(imageFilePath)); ImageLoader.RequestLoadFullImage(imageFilePath); //Another hack to wait until the load is finished prevTime = Time.realtimeSinceStartup; while (Time.realtimeSinceStartup - prevTime < TIMEOUT_SEC) { yield return(null); } ImageLoader.GetImageDataInto(imageFilePath, StreamingImageSequenceConstants.IMAGE_TYPE_FULL, out ImageData imageData); Assert.AreEqual(StreamingImageSequenceConstants.READ_STATUS_SUCCESS, imageData.ReadStatus); yield return(null); //cleanup StreamingImageSequencePlugin.UnloadAllImages(); bool folderDeleted = FileUtility.DeleteFilesAndFolders(OUTPUT_FOLDER); Assert.IsTrue(folderDeleted); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }
public IEnumerator UncheckFrameMarkers() { PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); TimelineClipSISData timelineClipSISData = sisAsset.GetBoundTimelineClipSISData(); timelineClipSISData.RequestFrameMarkers(true, true); yield return(null); double timePerFrame = TimelineUtility.CalculateTimePerFrame(clip); int numImages = sisAsset.GetNumImages(); clip.timeScale = 3.75f; //use scaling EditorUtilityTest.ResizeSISTimelineClip(clip, (timePerFrame * numImages)); yield return(null); int numFrames = TimelineUtility.CalculateNumFrames(clip); Assert.AreEqual(numImages, numFrames); //Reset: make sure that the curve is a simple straight line from 0 to 1 StreamingImageSequencePlayableAsset.ResetTimelineClipCurve(clip); yield return(null); sisAsset.ResetPlayableFrames(); yield return(null); StreamingImageSequenceTrack track = clip.parentTrack as StreamingImageSequenceTrack; Assert.IsNotNull(track); List <FrameMarker> frameMarkers = new List <FrameMarker>(); int i = 0; foreach (var m in track.GetMarkers()) { FrameMarker marker = m as FrameMarker; Assert.IsNotNull(marker); frameMarkers.Add(marker); int imageIndex = sisAsset.GlobalTimeToImageIndex(clip, marker.time); Assert.AreEqual(i, imageIndex); ++i; } Assert.AreEqual(numImages, i); //Uncheck and see if the unchecked images became ignored frameMarkers[4].SetFrameUsed(false); frameMarkers[5].SetFrameUsed(false); Assert.AreEqual(3, sisAsset.GlobalTimeToImageIndex(clip, frameMarkers[4].time)); Assert.AreEqual(3, sisAsset.GlobalTimeToImageIndex(clip, frameMarkers[5].time)); frameMarkers[7].SetFrameUsed(false); frameMarkers[8].SetFrameUsed(false); Assert.AreEqual(6, sisAsset.GlobalTimeToImageIndex(clip, frameMarkers[7].time)); Assert.AreEqual(6, sisAsset.GlobalTimeToImageIndex(clip, frameMarkers[8].time)); EditorUtilityTest.DestroyTestTimelineAssets(clip); yield return(null); }