adjust VideoPlayer to unload AV1 streams on Unload
							parent
							
								
									1b40b5e7d3
								
							
						
					
					
						commit
						0fbe241848
					
				|  | @ -8,6 +8,7 @@ namespace MoonWorks.Video | |||
| 		public IntPtr Handle => handle; | ||||
| 		IntPtr handle; | ||||
| 
 | ||||
| 		public bool Loaded => handle != IntPtr.Zero; | ||||
| 		public bool Ended => Dav1dfile.df_eos(Handle) == 1; | ||||
| 
 | ||||
| 		public IntPtr yDataHandle; | ||||
|  | @ -20,21 +21,41 @@ namespace MoonWorks.Video | |||
| 
 | ||||
| 		public bool FrameDataUpdated { get; set; } | ||||
| 
 | ||||
| 		private VideoAV1 Parent; | ||||
| 
 | ||||
| 		public VideoAV1Stream(GraphicsDevice device, VideoAV1 video) : base(device) | ||||
| 		{ | ||||
| 			if (Dav1dfile.df_fopen(video.Filename, out handle) == 0) | ||||
| 			{ | ||||
| 				throw new Exception("Failed to open video file!"); | ||||
| 			} | ||||
| 			handle = IntPtr.Zero; | ||||
| 			Parent = video; | ||||
| 		} | ||||
| 
 | ||||
| 			Reset(); | ||||
| 		public void Load() | ||||
| 		{ | ||||
| 			if (!Loaded) | ||||
| 			{ | ||||
| 				if (Dav1dfile.df_fopen(Parent.Filename, out handle) == 0) | ||||
| 				{ | ||||
| 					throw new Exception("Failed to load video file!"); | ||||
| 				} | ||||
| 
 | ||||
| 				Reset(); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		public void Unload() | ||||
| 		{ | ||||
| 			if (Loaded) | ||||
| 			{ | ||||
| 				Dav1dfile.df_close(handle); | ||||
| 				handle = IntPtr.Zero; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		public void Reset() | ||||
| 		{ | ||||
| 			lock (this) | ||||
| 			{ | ||||
| 				Dav1dfile.df_reset(Handle); | ||||
| 				Dav1dfile.df_reset(handle); | ||||
| 				ReadNextFrame(); | ||||
| 			} | ||||
| 		} | ||||
|  | @ -46,7 +67,7 @@ namespace MoonWorks.Video | |||
| 				if (!Ended) | ||||
| 				{ | ||||
| 					if (Dav1dfile.df_readvideo( | ||||
| 						Handle, | ||||
| 						handle, | ||||
| 						1, | ||||
| 						out var yDataHandle, | ||||
| 						out var uDataHandle, | ||||
|  | @ -74,7 +95,7 @@ namespace MoonWorks.Video | |||
| 		{ | ||||
| 			if (!IsDisposed) | ||||
| 			{ | ||||
| 				Dav1dfile.df_close(Handle); | ||||
| 				Unload(); | ||||
| 			} | ||||
| 			base.Dispose(disposing); | ||||
| 		} | ||||
|  |  | |||
|  | @ -164,9 +164,18 @@ namespace MoonWorks.Video | |||
| 		/// </summary> | ||||
| 		public void Unload() | ||||
| 		{ | ||||
| 			Stop(); | ||||
| 			ReadNextFrameTask?.Wait(); | ||||
| 			ResetTask?.Wait(); | ||||
| 			ResetSecondaryStreamTask?.Wait(); | ||||
| 
 | ||||
| 			Stop(); | ||||
| 
 | ||||
| 			Video.StreamA.Unload(); | ||||
| 			Video.StreamB.Unload(); | ||||
| 
 | ||||
| 			ReadNextFrameTask = null; | ||||
| 			ResetTask = null; | ||||
| 			ResetSecondaryStreamTask = null; | ||||
| 			Video = null; | ||||
| 		} | ||||
| 
 | ||||
|  | @ -224,6 +233,7 @@ namespace MoonWorks.Video | |||
| 			lock (CurrentStream) | ||||
| 			{ | ||||
| 				ResetTask?.Wait(); | ||||
| 				ResetTask = null; | ||||
| 
 | ||||
| 				var commandBuffer = Device.AcquireCommandBuffer(); | ||||
| 
 | ||||
|  | @ -322,7 +332,11 @@ namespace MoonWorks.Video | |||
| 
 | ||||
| 		private void InitializeDav1dStream() | ||||
| 		{ | ||||
| 			Video.StreamA.Load(); | ||||
| 			Video.StreamB.Load(); | ||||
| 
 | ||||
| 			ReadNextFrameTask?.Wait(); | ||||
| 			ReadNextFrameTask = null; | ||||
| 
 | ||||
| 			ResetTask = Task.Run(Video.StreamA.Reset); | ||||
| 			ResetTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue