Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2021-09-18 10:55:26 +0300
committerSebastian Dröge <sebastian@centricular.com>2021-09-18 12:34:31 +0300
commitfd1c0a75182dd9560064b81bace52796b501996b (patch)
treea34be29904412db0ee633f1df750b767704188cf /video/ffv1
parent4c8c398aa41ddb2b41b74d3f657682a5396864bd (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.
Diffstat (limited to 'video/ffv1')
-rw-r--r--video/ffv1/src/ffv1dec/imp.rs10
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)
}