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

github.com/sdroege/gst-plugin-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/video
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2023-01-19 14:53:21 +0300
committerSebastian Dröge <sebastian@centricular.com>2023-01-19 14:53:21 +0300
commit03df4f253cc56bcb3c61df9202991fd6f2094f5b (patch)
treec53510e57791cdba03635161af9fda2fe316a81c /video
parentb161f56a5c1b2215111cbdd368eb5d931e84b530 (diff)
gtk4: Asynchronously flush frames from GDK
There is no need to wait until the frames are flushed as the textures will be kept alive until GDK is finished with them, and doing so can cause deadlocks. Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/287 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1052>
Diffstat (limited to 'video')
-rw-r--r--video/gtk4/src/sink/imp.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/video/gtk4/src/sink/imp.rs b/video/gtk4/src/sink/imp.rs
index caa8361d..6c1d3f8e 100644
--- a/video/gtk4/src/sink/imp.rs
+++ b/video/gtk4/src/sink/imp.rs
@@ -236,8 +236,10 @@ impl ElementImpl for PaintableSink {
let _ = self.info.lock().unwrap().take();
let _ = self.pending_frame.lock().unwrap().take();
+ // Flush frames from the GDK paintable but don't wait
+ // for this to finish as this can other deadlock.
let self_ = self.to_owned();
- utils::invoke_on_main_thread(move || {
+ glib::MainContext::default().invoke(move || {
let paintable = self_.paintable.lock().unwrap();
if let Some(paintable) = &*paintable {
paintable.get_ref().handle_flush_frames();