这篇文章上次修改于 763 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

全局变量初始化:

lazy_static::lazy_static! {
    static ref VIDEO: Arc<Mutex<Option<Video>>> = Default::default();
}

赋值:

*VIDEO.lock().unwrap() = Some(site);

修改:

VIDEO.lock().unwrap().as_mut().map(|v| {
    let ok = v.start_streaming(
        (FRAME_WIDTH, FRAME_HEIGHT),
        COLOR_SPACE::Rgb32,
        None,
    );
});

如果不需要在线程间传递,且仅仅是读取,可以用类似 if let Some(ref chunk) = channel.header_chunk的语法:

pub struct Channel {
    pub name: String,
    header_chunk: Option<Chunk>,
    listeners: Vec<Sender<Chunk>>,
}

if let Some(ref chunk) = channel.header_chunk {
    sender
        .start_send(chunk.clone())
        .expect("Queuing existing header chunk");
}