diff --git a/src/pipeline.rs b/src/pipeline.rs index c5ac635..baae662 100644 --- a/src/pipeline.rs +++ b/src/pipeline.rs @@ -1,3 +1,4 @@ +use crate::video::Frame; use iced_wgpu::primitive::Primitive; use iced_wgpu::wgpu; use std::{ @@ -9,8 +10,6 @@ use std::{ }, }; -use crate::video::Frame; - #[repr(C)] struct Uniforms { rect: [f32; 4], diff --git a/src/video.rs b/src/video.rs index 9bdb61b..01cbb5b 100644 --- a/src/video.rs +++ b/src/video.rs @@ -45,17 +45,10 @@ impl From for Position { pub(crate) struct Frame(gst::Sample); impl Frame { - pub fn new() -> Self { + pub fn empty() -> Self { Self(gst::Sample::builder().build()) } - pub fn store(&mut self, sample: gst::Sample) -> Option<()> { - if sample.buffer().is_some() { - self.0 = sample; - Some(()) - } else { - None - } - } + pub fn readable(&self) -> Option> { self.0.buffer().map(|x| x.map_readable().ok()).flatten() } @@ -312,7 +305,7 @@ impl Video { let sync_av = pipeline.has_property("av-offset", None); // NV12 = 12bpp - let frame = Arc::new(Mutex::new(Frame::new())); + let frame = Arc::new(Mutex::new(Frame::empty())); let upload_frame = Arc::new(AtomicBool::new(false)); let alive = Arc::new(AtomicBool::new(true)); let last_frame_time = Arc::new(Mutex::new(Instant::now()));