sketching out network sending
							parent
							
								
									b90c934242
								
							
						
					
					
						commit
						d6297dcbd3
					
				|  | @ -6,8 +6,9 @@ use std:: | |||
| pub enum MsgFromController | ||||
| { | ||||
| 	RepaintGui (RgbaFrame), | ||||
| 	StartCapture, | ||||
| 	StartJpegDecoder (JpegFrame), | ||||
|     StartNetworkSend (JpegFrame), | ||||
| 	StartCapture, | ||||
| } | ||||
| 
 | ||||
| #[derive (Clone)] | ||||
|  | @ -29,12 +30,16 @@ pub struct Controller | |||
|     gui_has_new_frame: bool, | ||||
|     gui_needs_frame: bool, | ||||
|     
 | ||||
|     capture_is_running: bool, | ||||
|     
 | ||||
|     jpeg_decoder_is_running: bool, | ||||
|     jpeg_decoder_has_new_frame: bool, | ||||
|     jpeg_decoder_needs_frame: bool, | ||||
|     
 | ||||
|     network_send_is_running: bool, | ||||
|     network_send_has_new_frame: bool, | ||||
|     network_send_needs_frame: bool, | ||||
|     
 | ||||
|     capture_is_running: bool, | ||||
|     
 | ||||
|     rgba_frame: RgbaFrame, | ||||
|     jpeg_frame: JpegFrame, | ||||
| } | ||||
|  | @ -48,11 +53,16 @@ impl Controller | |||
|             gui_has_new_frame: false, | ||||
|             gui_needs_frame: false, | ||||
|             
 | ||||
|             capture_is_running: false, | ||||
|             jpeg_decoder_has_new_frame: false, | ||||
|             jpeg_decoder_is_running: false, | ||||
|             jpeg_decoder_needs_frame: false, | ||||
|             
 | ||||
|             network_send_has_new_frame: false, | ||||
|             network_send_is_running: false, | ||||
|             network_send_needs_frame: true, | ||||
|             
 | ||||
|             capture_is_running: false, | ||||
|             
 | ||||
|             rgba_frame: RgbaFrame | ||||
|             { | ||||
|                 data: Default::default (), 
 | ||||
|  | @ -66,6 +76,25 @@ impl Controller | |||
|         } | ||||
|     } | ||||
|     
 | ||||
|     pub fn handle_gui_needs_frame (&mut self) | ||||
| 	{ | ||||
|         // println! ("handle_gui_needs_frame");
 | ||||
| 		self.gui_needs_frame = true; | ||||
| 	} | ||||
| 	
 | ||||
| 	pub fn handle_network_write_needs_frame (&mut self) | ||||
| 	{ | ||||
|         println! ("handle_network_write_needs_frame"); | ||||
|         self.network_send_needs_frame = true; | ||||
| 	} | ||||
|     
 | ||||
|     pub fn handle_network_write_finished (&mut self) | ||||
|     { | ||||
|         println! ("handle_network_write_finished"); | ||||
|         self.network_send_has_new_frame = false; | ||||
|         self.network_send_is_running = false; | ||||
|     } | ||||
|     
 | ||||
| 	pub fn handle_rgba_frame (&mut self, frame: RgbaFrame) | ||||
| 	{ | ||||
|         // println! ("handle_rgba_frame");
 | ||||
|  | @ -79,18 +108,18 @@ impl Controller | |||
| 	{ | ||||
|         // println! ("handle_capture");
 | ||||
|         self.capture_is_running = false; | ||||
|         
 | ||||
| 		self.jpeg_frame = jpeg; | ||||
| 		
 | ||||
| 		self.jpeg_decoder_has_new_frame = true; | ||||
| 	} | ||||
| 	
 | ||||
| 	pub fn handle_gui_needs_frame (&mut self) | ||||
| 	{ | ||||
|         // println! ("handle_gui_needs_frame");
 | ||||
| 		self.gui_needs_frame = true; | ||||
| 		self.network_send_has_new_frame = true; | ||||
| 	} | ||||
| 	
 | ||||
| 	pub fn poll (&mut self) -> Option <MsgFromController> | ||||
| 	{ | ||||
|         let capture_for_jpeg_decoder = self.jpeg_decoder_needs_frame && ! self.jpeg_decoder_has_new_frame; | ||||
|         let capture_for_network_send = self.network_send_needs_frame && ! self.network_send_has_new_frame; | ||||
|         
 | ||||
| 		if self.gui_needs_frame && self.gui_has_new_frame | ||||
| 		{ | ||||
|             self.gui_has_new_frame = false; | ||||
|  | @ -105,7 +134,13 @@ impl Controller | |||
| 			// println! ("StartJpegDecoder");
 | ||||
| 			Some (MsgFromController::StartJpegDecoder (self.jpeg_frame.clone ())) | ||||
| 		} | ||||
| 		else if self.jpeg_decoder_needs_frame && ! self.jpeg_decoder_has_new_frame && ! self.capture_is_running | ||||
| 		else if self.network_send_has_new_frame && ! self.network_send_is_running && self.network_send_needs_frame | ||||
| 		{ | ||||
|             self.network_send_is_running = true; | ||||
|             self.network_send_needs_frame = false; | ||||
|             Some (MsgFromController::StartNetworkSend (self.jpeg_frame.clone ())) | ||||
| 		} | ||||
| 		else if (capture_for_jpeg_decoder || capture_for_network_send) && ! self.capture_is_running | ||||
| 		{ | ||||
|             self.capture_is_running = true; | ||||
|             // println! ("StartCapture");
 | ||||
|  |  | |||
|  | @ -21,8 +21,9 @@ use crate:: | |||
| pub enum MsgToDriver | ||||
| { | ||||
|     GuiNeedsRgbaFrame, | ||||
|     GotCapture ((Capture, JpegFrame)), | ||||
|     DecodedJpegToRgba (RgbaFrame), | ||||
|     NetworkWriteFinished, | ||||
|     GotCapture ((Capture, JpegFrame)), | ||||
| } | ||||
| 
 | ||||
| pub enum MsgToGui | ||||
|  | @ -75,19 +76,23 @@ impl Driver | |||
|         { | ||||
|             match self.recv.recv().unwrap () | ||||
|             { | ||||
|                 MsgToDriver::GuiNeedsRgbaFrame => | ||||
|                 { | ||||
|                     self.ctl.handle_gui_needs_frame (); | ||||
|                 }, | ||||
|                 MsgToDriver::DecodedJpegToRgba (frame) => | ||||
|                 { | ||||
|                     self.ctl.handle_rgba_frame (frame); | ||||
|                 }, | ||||
|                 MsgToDriver::NetworkWriteFinished => | ||||
|                 { | ||||
|                     self.ctl.handle_network_write_finished (); | ||||
|                 }, | ||||
|                 MsgToDriver::GotCapture ((capture, jpeg)) => | ||||
|                 { | ||||
|                     self.ctl.handle_capture (jpeg); | ||||
|                     self.capture = Some (capture); | ||||
|                 }, | ||||
|                 MsgToDriver::GuiNeedsRgbaFrame => | ||||
|                 { | ||||
|                     self.ctl.handle_gui_needs_frame (); | ||||
|                 }, | ||||
|             } | ||||
|             
 | ||||
|             while let Some (msg) = self.ctl.poll () | ||||
|  | @ -120,6 +125,16 @@ impl Driver | |||
|                             send.send (MsgToDriver::DecodedJpegToRgba (rgba)).unwrap (); | ||||
|                         }); | ||||
|                     }, | ||||
|                     MsgFromController::StartNetworkSend (jpeg) => | ||||
|                     { | ||||
|                         let send = self.send.clone (); | ||||
|                         pool.spawn (move || | ||||
|                         { | ||||
|                             sleep_ms (50); | ||||
|                             
 | ||||
|                             send.send (MsgToDriver::NetworkWriteFinished).unwrap (); | ||||
|                         }); | ||||
|                     }, | ||||
|                     MsgFromController::StartCapture => | ||||
|                     { | ||||
|                         let mut capture = self.capture.take ().unwrap (); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 _
						_