sketching out network sending

main
_ 2023-09-12 22:54:53 -05:00
parent b90c934242
commit d6297dcbd3
2 changed files with 66 additions and 16 deletions

View File

@ -6,8 +6,9 @@ use std::
pub enum MsgFromController pub enum MsgFromController
{ {
RepaintGui (RgbaFrame), RepaintGui (RgbaFrame),
StartCapture,
StartJpegDecoder (JpegFrame), StartJpegDecoder (JpegFrame),
StartNetworkSend (JpegFrame),
StartCapture,
} }
#[derive (Clone)] #[derive (Clone)]
@ -29,12 +30,16 @@ pub struct Controller
gui_has_new_frame: bool, gui_has_new_frame: bool,
gui_needs_frame: bool, gui_needs_frame: bool,
capture_is_running: bool,
jpeg_decoder_is_running: bool, jpeg_decoder_is_running: bool,
jpeg_decoder_has_new_frame: bool, jpeg_decoder_has_new_frame: bool,
jpeg_decoder_needs_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, rgba_frame: RgbaFrame,
jpeg_frame: JpegFrame, jpeg_frame: JpegFrame,
} }
@ -48,11 +53,16 @@ impl Controller
gui_has_new_frame: false, gui_has_new_frame: false,
gui_needs_frame: false, gui_needs_frame: false,
capture_is_running: false,
jpeg_decoder_has_new_frame: false, jpeg_decoder_has_new_frame: false,
jpeg_decoder_is_running: false, jpeg_decoder_is_running: false,
jpeg_decoder_needs_frame: 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 rgba_frame: RgbaFrame
{ {
data: Default::default (), 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) pub fn handle_rgba_frame (&mut self, frame: RgbaFrame)
{ {
// println! ("handle_rgba_frame"); // println! ("handle_rgba_frame");
@ -79,18 +108,18 @@ impl Controller
{ {
// println! ("handle_capture"); // println! ("handle_capture");
self.capture_is_running = false; self.capture_is_running = false;
self.jpeg_frame = jpeg; self.jpeg_frame = jpeg;
self.jpeg_decoder_has_new_frame = true; self.jpeg_decoder_has_new_frame = true;
} self.network_send_has_new_frame = true;
pub fn handle_gui_needs_frame (&mut self)
{
// println! ("handle_gui_needs_frame");
self.gui_needs_frame = true;
} }
pub fn poll (&mut self) -> Option <MsgFromController> 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 if self.gui_needs_frame && self.gui_has_new_frame
{ {
self.gui_has_new_frame = false; self.gui_has_new_frame = false;
@ -105,7 +134,13 @@ impl Controller
// println! ("StartJpegDecoder"); // println! ("StartJpegDecoder");
Some (MsgFromController::StartJpegDecoder (self.jpeg_frame.clone ())) 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; self.capture_is_running = true;
// println! ("StartCapture"); // println! ("StartCapture");

View File

@ -21,8 +21,9 @@ use crate::
pub enum MsgToDriver pub enum MsgToDriver
{ {
GuiNeedsRgbaFrame, GuiNeedsRgbaFrame,
GotCapture ((Capture, JpegFrame)),
DecodedJpegToRgba (RgbaFrame), DecodedJpegToRgba (RgbaFrame),
NetworkWriteFinished,
GotCapture ((Capture, JpegFrame)),
} }
pub enum MsgToGui pub enum MsgToGui
@ -75,19 +76,23 @@ impl Driver
{ {
match self.recv.recv().unwrap () match self.recv.recv().unwrap ()
{ {
MsgToDriver::GuiNeedsRgbaFrame =>
{
self.ctl.handle_gui_needs_frame ();
},
MsgToDriver::DecodedJpegToRgba (frame) => MsgToDriver::DecodedJpegToRgba (frame) =>
{ {
self.ctl.handle_rgba_frame (frame); self.ctl.handle_rgba_frame (frame);
}, },
MsgToDriver::NetworkWriteFinished =>
{
self.ctl.handle_network_write_finished ();
},
MsgToDriver::GotCapture ((capture, jpeg)) => MsgToDriver::GotCapture ((capture, jpeg)) =>
{ {
self.ctl.handle_capture (jpeg); self.ctl.handle_capture (jpeg);
self.capture = Some (capture); self.capture = Some (capture);
}, },
MsgToDriver::GuiNeedsRgbaFrame =>
{
self.ctl.handle_gui_needs_frame ();
},
} }
while let Some (msg) = self.ctl.poll () while let Some (msg) = self.ctl.poll ()
@ -120,6 +125,16 @@ impl Driver
send.send (MsgToDriver::DecodedJpegToRgba (rgba)).unwrap (); 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 => MsgFromController::StartCapture =>
{ {
let mut capture = self.capture.take ().unwrap (); let mut capture = self.capture.take ().unwrap ();