Merge pull request #6086 from dignow/fix/try_video_capturing_on_close_window
try stop video capturing, on close window
This commit is contained in:
commit
d7036aae48
@ -1377,6 +1377,9 @@ pub fn get_cur_session() -> Option<FlutterSession> {
|
||||
|
||||
// sessions mod is used to avoid the big lock of sessions' map.
|
||||
pub mod sessions {
|
||||
#[cfg(feature = "flutter_texture_render")]
|
||||
use std::collections::HashSet;
|
||||
|
||||
use super::*;
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
@ -1441,12 +1444,44 @@ pub mod sessions {
|
||||
let mut remove_peer_key = None;
|
||||
for (peer_key, s) in SESSIONS.write().unwrap().iter_mut() {
|
||||
let mut write_lock = s.ui_handler.session_handlers.write().unwrap();
|
||||
if write_lock.remove(id).is_some() {
|
||||
let remove_ret = write_lock.remove(id);
|
||||
#[cfg(not(feature = "flutter_texture_render"))]
|
||||
if remove_ret.is_some() {
|
||||
if write_lock.is_empty() {
|
||||
remove_peer_key = Some(peer_key.clone());
|
||||
}
|
||||
break;
|
||||
}
|
||||
#[cfg(feature = "flutter_texture_render")]
|
||||
match remove_ret {
|
||||
Some(_) => {
|
||||
if write_lock.is_empty() {
|
||||
remove_peer_key = Some(peer_key.clone());
|
||||
} else {
|
||||
// Set capture displays if some are not used any more.
|
||||
let mut remains_displays = HashSet::new();
|
||||
for (_, h) in write_lock.iter() {
|
||||
remains_displays.extend(
|
||||
h.renderer
|
||||
.map_display_sessions
|
||||
.read()
|
||||
.unwrap()
|
||||
.keys()
|
||||
.cloned(),
|
||||
);
|
||||
}
|
||||
if !remains_displays.is_empty() {
|
||||
s.capture_displays(
|
||||
vec![],
|
||||
vec![],
|
||||
remains_displays.iter().map(|d| *d as i32).collect(),
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
}
|
||||
SESSIONS.write().unwrap().remove(&remove_peer_key?)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user