From 1a5473264e8aeaba42c1045a07c7f63ca2d24523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 2 Feb 2022 13:39:54 +0200 Subject: [PATCH] dav1ddec: Don't consider decoding errors as fatal Instead use the `gst_video::video_decoder_error!` macro for allowing a certain number of consecutive errors before actually failing. --- video/dav1d/src/dav1ddec/imp.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/video/dav1d/src/dav1ddec/imp.rs b/video/dav1d/src/dav1ddec/imp.rs index 9b6b54eb..faedfce3 100644 --- a/video/dav1d/src/dav1ddec/imp.rs +++ b/video/dav1d/src/dav1ddec/imp.rs @@ -147,12 +147,19 @@ impl Dav1dDec { let input_data = input_buffer .map_readable() .map_err(|_| gst::FlowError::Error)?; - let pictures = decoder - .decode(input_data, frame_number, timestamp, duration, || {}) - .map_err(|e| { - gst_error!(CAT, "Decoding failed (error code: {})", e); - gst::FlowError::Error - })?; + let pictures = match decoder.decode(input_data, frame_number, timestamp, duration, || {}) { + Ok(pictures) => pictures, + Err(err) => { + gst_error!(CAT, "Decoding failed (error code: {})", err); + return gst_video::video_decoder_error!( + element, + 1, + gst::StreamError::Decode, + ["Decoding failed (error code {})", err] + ) + .map(|_| vec![]); + } + }; let mut decoded_pictures = vec![]; for pic in pictures {