Exemplo n.º 1
0
bool COMXCoreComponent::Deinitialize()
{
  OMX_ERRORTYPE omx_err;

  if(!m_DllOMXOpen)
    return false;

  m_exit = true;

  m_flush_input   = true;
  m_flush_output  = true;

  if(m_handle) 
  {

    FlushAll();

    FreeOutputBuffers(true);
    FreeInputBuffers(true);

    if(GetState() == OMX_StateExecuting)
      SetStateForComponent(OMX_StatePause);

    if(GetState() != OMX_StateIdle)
      SetStateForComponent(OMX_StateIdle);

    if(GetState() != OMX_StateLoaded)
      SetStateForComponent(OMX_StateLoaded);

    omx_err = m_DllOMX->OMX_FreeHandle(m_handle);
    if (omx_err != OMX_ErrorNone)
    {
      CLog::Log(LOGERROR, "COMXCoreComponent::Deinitialize - failed to free handle for component %s omx_err(0x%08x)", 
          m_componentName.c_str(), omx_err);
    }  

    m_handle = NULL;
  }

  m_input_port    = 0;
  m_output_port   = 0;
  m_componentName = "";
  m_DllOMXOpen    = false;

  CustomDecoderFillBufferDoneHandler = NULL;
  CustomDecoderEmptyBufferDoneHandler = NULL;

  m_DllOMX->Unload();

  return true;
}
bool COMXCoreComponent::Deinitialize(bool free_component /* = false */)
{
  OMX_ERRORTYPE omx_err;

  m_exit = true;

  m_flush_input   = true;
  m_flush_output  = true;

  if(m_handle && m_DllOMXOpen)
  {
    FlushAll();

    FreeOutputBuffers();
    FreeInputBuffers();

    TransitionToStateLoaded();

    if(free_component)
    {
      CLog::Log(LOGDEBUG, "COMXCoreComponent::Deinitialize : %s handle 0x%08x dllopen : %d\n", 
          m_componentName.c_str(), m_handle, m_DllOMXOpen);
      omx_err = m_DllOMX->OMX_FreeHandle(m_handle);
      if (omx_err != OMX_ErrorNone)
      {
        CLog::Log(LOGERROR, "COMXCoreComponent::Deinitialize - failed to free handle for component %s omx_err(0x%08x)", 
            m_componentName.c_str(), omx_err);
      }  
      m_handle = NULL;

      m_input_port      = 0;
      m_output_port     = 0;
      m_componentName   = "";
      m_resource_error  = false;
    }
  }

  return true;
}