[rbp/omxplayer] Add wait to port enables/disables
authorpopcornmix <popcornmix@gmail.com>
Tue, 8 Oct 2013 00:22:07 +0000 (01:22 +0100)
committerpopcornmix <popcornmix@gmail.com>
Tue, 8 Oct 2013 15:59:02 +0000 (16:59 +0100)
We get very occasional incorrect state errors when we don't wait for a port enable/disable.

xbmc/linux/OMXCore.cpp

index aeeaf2a..22c7e97 100644 (file)
@@ -117,6 +117,28 @@ OMX_ERRORTYPE COMXCoreTunel::Deestablish(bool noWait)
 
   if(m_src_component->GetComponent())
   {
+    omx_err = m_src_component->WaitForCommand(OMX_CommandPortDisable, m_src_port);
+    if(omx_err != OMX_ErrorNone)
+    {
+      CLog::Log(LOGERROR, "COMXCoreTunel::Deestablish - Error WaitForCommand port %d on component %s omx_err(0x%08x)",
+          m_dst_port, m_src_component->GetName().c_str(), (int)omx_err);
+      return omx_err;
+    }
+  }
+
+  if(m_dst_component->GetComponent())
+  {
+    omx_err = m_dst_component->WaitForCommand(OMX_CommandPortDisable, m_dst_port);
+    if(omx_err != OMX_ErrorNone)
+    {
+      CLog::Log(LOGERROR, "COMXCoreTunel::Deestablish - Error WaitForCommand port %d on component %s omx_err(0x%08x)",
+          m_dst_port, m_dst_component->GetName().c_str(), (int)omx_err);
+      return omx_err;
+    }
+  }
+
+  if(m_src_component->GetComponent())
+  {
     omx_err = m_DllOMX->OMX_SetupTunnel(m_src_component->GetComponent(), m_src_port, NULL, 0);
     if(omx_err != OMX_ErrorNone)
     {
@@ -191,6 +213,28 @@ OMX_ERRORTYPE COMXCoreTunel::Establish(bool portSettingsChanged, bool enable_por
     }
   }
 
+  if(m_src_component->GetComponent() && disable_ports)
+  {
+    omx_err = m_src_component->WaitForCommand(OMX_CommandPortDisable, m_src_port);
+    if(omx_err != OMX_ErrorNone)
+    {
+      CLog::Log(LOGERROR, "COMXCoreTunel::Establish - Error WaitForCommand port %d on component %s omx_err(0x%08x)",
+          m_dst_port, m_src_component->GetName().c_str(), (int)omx_err);
+      return omx_err;
+    }
+  }
+
+  if(m_dst_component->GetComponent() && disable_ports)
+  {
+    omx_err = m_dst_component->WaitForCommand(OMX_CommandPortDisable, m_dst_port);
+    if(omx_err != OMX_ErrorNone)
+    {
+      CLog::Log(LOGERROR, "COMXCoreTunel::Establish - Error WaitForCommand port %d on component %s omx_err(0x%08x)",
+          m_dst_port, m_dst_component->GetName().c_str(), (int)omx_err);
+      return omx_err;
+    }
+  }
+
   if(m_src_component->GetComponent() && m_dst_component->GetComponent())
   {
     omx_err = m_DllOMX->OMX_SetupTunnel(m_src_component->GetComponent(), m_src_port, m_dst_component->GetComponent(), m_dst_port);