From 06709c9fa52767fd407bcfdbab1ad563d8c4ec5f Mon Sep 17 00:00:00 2001 From: conglinyizhi Date: Sat, 7 Dec 2024 13:11:46 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(main):=20=E4=BD=BF=E7=94=A8=20?= =?UTF-8?q?`crossbeam`=20=E5=BA=93=E4=BC=98=E5=8C=96=E5=9B=BE=E5=83=8F?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=B5=81=E7=A8=8B=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 24 ++++++++++++++++++++++++ Cargo.toml | 2 ++ src/main.rs | 40 ++++++++++++++++++++++++---------------- 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 308c445..9f615e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -183,6 +183,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.13" @@ -211,6 +224,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -772,6 +794,8 @@ dependencies = [ name = "rust_v4l2" version = "0.1.0" dependencies = [ + "crossbeam", + "crossbeam-channel", "fltk", "image", "rscam", diff --git a/Cargo.toml b/Cargo.toml index fde327a..a63c506 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,8 @@ version = "0.1.0" edition = "2021" [dependencies] +crossbeam = "0.8.4" +crossbeam-channel = "0.5.13" fltk = "1.4.36" image = "0.25.5" rscam = "0.5.5" diff --git a/src/main.rs b/src/main.rs index 76f2c49..0268e3b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -61,23 +61,31 @@ fn main() { w = l_data.width() as i32; h = l_data.height() as i32; } - for tmp_x in 0..30 { - for tmp_y in 0..60 { - rgb_data.put_pixel(tmp_x, tmp_y, Rgb([102, 204, 255])); + crossbeam::scope(|_| { + for tmp_x in 0..30 { + for tmp_y in 0..60 { + rgb_data.put_pixel(tmp_x, tmp_y, Rgb([102, 204, 255])); + } } - } - let fltk_l_image = - RgbImage::new(l_data.as_raw(), w, h, ColorDepth::L8).unwrap(); - let fltk_rgb_image = - RgbImage::new(rgb_data.as_raw(), w, h, ColorDepth::Rgb8).unwrap(); - camera_frame.set_image(Some(fltk_l_image)); - color_frame.set_image(Some(fltk_rgb_image)); - // 通过重新调整尺寸从而刷新图像 - color_frame.set_size(w, h); - camera_frame.redraw(); - color_frame.redraw(); - let duration = start.elapsed(); - println!("Time elapsed in DrawImage is: {:?}", duration); + let fltk_rgb_image = + RgbImage::new(rgb_data.as_raw(), w, h, ColorDepth::Rgb8).unwrap(); + color_frame.set_image(Some(fltk_rgb_image)); + color_frame.set_size(w, h); + color_frame.redraw(); + let duration = start.elapsed(); + println!("L8 Frame Draw use time: {:?}", duration); + }) + .unwrap(); + crossbeam::scope(|_| { + let fltk_l_image = + RgbImage::new(l_data.as_raw(), w, h, ColorDepth::L8).unwrap(); + camera_frame.set_image(Some(fltk_l_image)); + // 通过重新调整尺寸从而刷新图像 + camera_frame.redraw(); + let duration = start.elapsed(); + println!("RGB8 Frame Draw use time: {:?}", duration); + }) + .unwrap(); } Err(e) => { eprintln!("捕获错误: {}", e);