From fd1c0a75182dd9560064b81bace52796b501996b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 18 Sep 2021 10:55:26 +0300 Subject: ffv1dec: Drop decoder state before calling VideoDecoder::negotiate() It calls into other elements via the allocation query and the caps event, which makes it dangerous to keep a mutex locked at the same time. --- video/ffv1/src/ffv1dec/imp.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'video/ffv1') diff --git a/video/ffv1/src/ffv1dec/imp.rs b/video/ffv1/src/ffv1dec/imp.rs index dd1b3e01a..97bbef1a7 100644 --- a/video/ffv1/src/ffv1dec/imp.rs +++ b/video/ffv1/src/ffv1dec/imp.rs @@ -304,15 +304,17 @@ impl VideoDecoderImpl for Ffv1Dec { let output_info = Some(output_state.info()); - element - .negotiate(output_state) - .map_err(|err| gst::loggable_error!(CAT, "Negotiation failed: {}", err))?; - let mut decoder_state = self.state.lock().unwrap(); *decoder_state = DecoderState::Started { output_info, decoder: Box::new(decoder), + video_meta_supported: false, }; + drop(decoder_state); + + element + .negotiate(output_state) + .map_err(|err| gst::loggable_error!(CAT, "Negotiation failed: {}", err))?; self.parent_set_format(element, state) } -- cgit v1.2.3