From ade54b9a509697128d55f45136cffad430e68f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Wed, 24 Oct 2018 12:46:32 +0200 Subject: [PATCH] Workaround set player uri bug --- backends/gstreamer/src/player.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/backends/gstreamer/src/player.rs b/backends/gstreamer/src/player.rs index 300f8a17..340de170 100644 --- a/backends/gstreamer/src/player.rs +++ b/backends/gstreamer/src/player.rs @@ -238,10 +238,6 @@ impl GStreamerPlayer { /* video renderer */ None, /* signal dispatcher */ None, ); - player - .set_property("uri", &Value::from("appsrc://")) - .map_err(|e| BackendError::SetPropertyFailed(e.0))?; - // Set position interval update to 0.5 seconds. let mut config = player.get_config(); config.set_position_update_interval(500u32); @@ -264,6 +260,17 @@ impl GStreamerPlayer { ], )); + // There's a known bug in gstreamer that may cause a wrong transition + // to the ready state while setting the uri property: + // http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=afbbc3a97ec391c6a582f3c746965fdc3eb3e1f3 + // This may affect things like setting the config, so until the bug is + // fixed, make sure that state dependent code happens before this line. + // The estimated version for the fix is 1.14.5 / 1.15.1. + // https://github.com/servo/servo/issues/22010#issuecomment-432599657 + player + .set_property("uri", &Value::from("appsrc://")) + .map_err(|e| BackendError::SetPropertyFailed(e.0))?; + *self.inner.borrow_mut() = Some(Arc::new(Mutex::new(PlayerInner { player, appsrc: None,