sketching out network sending
parent
b90c934242
commit
d6297dcbd3
|
@ -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");
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
Loading…
Reference in New Issue