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.jpeg_frame = jpeg;
|
||||
|
||||
self.jpeg_decoder_has_new_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