diff --git a/src/api/internal.rs b/src/api/internal.rs index 5052dde72e..9a6f572304 100644 --- a/src/api/internal.rs +++ b/src/api/internal.rs @@ -439,14 +439,15 @@ impl ContextInner { fn set_frame_properties( &mut self, output_frameno: u64, - ) -> Result<(), EncoderStatus> { + ) -> Result { let fi = self.build_frame_properties(output_frameno)?; + let valid = !fi.invalid; let frame = self.frame_q.get(&fi.input_frameno).as_ref().unwrap().as_ref().unwrap(); self.frame_data.insert(output_frameno, FrameData::new(fi, frame.clone())); - Ok(()) + Ok(valid) } #[allow(unused)] @@ -795,12 +796,17 @@ impl ContextInner { #[hawktracer(compute_frame_invariants)] pub fn compute_frame_invariants(&mut self) { - while self.set_frame_properties(self.next_lookahead_output_frameno).is_ok() + while let Ok(valid) = + self.set_frame_properties(self.next_lookahead_output_frameno) { - self - .compute_lookahead_motion_vectors(self.next_lookahead_output_frameno); - if self.config.temporal_rdo() { - self.compute_lookahead_intra_costs(self.next_lookahead_output_frameno); + if valid { + self.compute_lookahead_motion_vectors( + self.next_lookahead_output_frameno, + ); + if self.config.temporal_rdo() { + self + .compute_lookahead_intra_costs(self.next_lookahead_output_frameno); + } } self.next_lookahead_output_frameno += 1; }