diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2021-09-18 10:55:26 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2021-09-18 12:34:31 +0300 |
commit | fd1c0a75182dd9560064b81bace52796b501996b (patch) | |
tree | a34be29904412db0ee633f1df750b767704188cf | |
parent | 4c8c398aa41ddb2b41b74d3f657682a5396864bd (diff) |
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.
-rw-r--r-- | video/ffv1/src/ffv1dec/imp.rs | 10 |
1 files changed, 6 insertions, 4 deletions
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) } |