reduce CPU usage

This commit is contained in:
jazzfool 2024-10-01 16:06:32 +10:00
parent be2b7d9257
commit 760b09a8b0
2 changed files with 14 additions and 9 deletions

View file

@ -209,6 +209,7 @@ impl Video {
let framerate = s let framerate = s
.get::<gst::Fraction>("framerate") .get::<gst::Fraction>("framerate")
.map_err(|_| Error::Caps)?; .map_err(|_| Error::Caps)?;
let framerate = framerate.numer() as f64 / framerate.denom() as f64;
let duration = std::time::Duration::from_nanos( let duration = std::time::Duration::from_nanos(
pipeline pipeline
@ -231,7 +232,8 @@ impl Video {
let alive_ref = Arc::clone(&alive); let alive_ref = Arc::clone(&alive);
let worker = std::thread::spawn(move || { let worker = std::thread::spawn(move || {
while alive_ref.load(Ordering::SeqCst) { while alive_ref.load(Ordering::Acquire) {
std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / framerate));
if let Err(gst::FlowError::Error) = (|| -> Result<(), gst::FlowError> { if let Err(gst::FlowError::Error) = (|| -> Result<(), gst::FlowError> {
let sample = app_sink.pull_sample().map_err(|_| gst::FlowError::Eos)?; let sample = app_sink.pull_sample().map_err(|_| gst::FlowError::Eos)?;
@ -260,7 +262,7 @@ impl Video {
width, width,
height, height,
framerate: framerate.numer() as f64 / framerate.denom() as f64, framerate,
duration, duration,
speed: 1.0, speed: 1.0,

View file

@ -233,13 +233,16 @@ where
inner.set_paused(true); inner.set_paused(true);
} }
if inner.upload_frame.load(Ordering::SeqCst) {
shell.request_redraw(iced::window::RedrawRequest::NextFrame);
if let Some(on_new_frame) = self.on_new_frame.clone() {
shell.publish(on_new_frame);
}
} else {
let redraw_interval = 1.0 / inner.framerate; let redraw_interval = 1.0 / inner.framerate;
shell.request_redraw(iced::window::RedrawRequest::At( shell.request_redraw(iced::window::RedrawRequest::At(
now + Duration::from_secs_f64(redraw_interval), now + Duration::from_secs_f64(redraw_interval),
)); ));
if let Some(on_new_frame) = self.on_new_frame.clone() {
shell.publish(on_new_frame);
} }
} }
Status::Captured Status::Captured