Merge pull request #5256 from dignow/refact/separate_remote_window

Refact/separate remote window
This commit is contained in:
RustDesk
2023-08-06 09:31:05 +08:00
committed by GitHub
58 changed files with 727 additions and 320 deletions

View File

@@ -186,7 +186,7 @@ pub type FlutterRgbaRendererPluginOnRgba = unsafe extern "C" fn(
#[derive(Clone)]
struct VideoRenderer {
// TextureRgba pointer in flutter native.
ptr: usize,
ptr: Arc<RwLock<usize>>,
width: usize,
height: usize,
on_rgba_func: Option<Symbol<'static, FlutterRgbaRendererPluginOnRgba>>,
@@ -214,7 +214,7 @@ impl Default for VideoRenderer {
}
};
Self {
ptr: 0,
ptr: Default::default(),
width: 0,
height: 0,
on_rgba_func,
@@ -231,7 +231,8 @@ impl VideoRenderer {
}
pub fn on_rgba(&self, rgba: &mut scrap::ImageRgb) {
if self.ptr == usize::default() {
let ptr = self.ptr.read().unwrap();
if *ptr == usize::default() {
return;
}
@@ -243,7 +244,7 @@ impl VideoRenderer {
if let Some(func) = &self.on_rgba_func {
unsafe {
func(
self.ptr as _,
*ptr as _,
rgba.raw.as_ptr() as _,
rgba.raw.len() as _,
rgba.w as _,
@@ -328,7 +329,7 @@ impl FlutterHandler {
#[inline]
#[cfg(feature = "flutter_texture_render")]
pub fn register_texture(&mut self, ptr: usize) {
self.renderer.write().unwrap().ptr = ptr;
*self.renderer.read().unwrap().ptr.write().unwrap() = ptr;
}
#[inline]
@@ -789,11 +790,15 @@ pub fn session_start_(
);
#[cfg(not(feature = "flutter_texture_render"))]
log::info!("Session {} start, render by flutter paint widget", id);
let is_pre_added = session.event_stream.read().unwrap().is_some();
session.close_event_stream();
*session.event_stream.write().unwrap() = Some(event_stream);
let session = session.clone();
std::thread::spawn(move || {
io_loop(session);
});
if !is_pre_added {
let session = session.clone();
std::thread::spawn(move || {
io_loop(session);
});
}
Ok(())
} else {
bail!("No session with peer id {}", id)