Example #1
0
// DecoderEmptyBufferDone -- OMXCore input buffer has been emptied
////////////////////////////////////////////////////////////////////////////////////////////
// Component event handler -- OMX event callback
OMX_ERRORTYPE COMXCoreComponent::DecoderEventHandler(
  OMX_HANDLETYPE hComponent,
  OMX_PTR pAppData,
  OMX_EVENTTYPE eEvent,
  OMX_U32 nData1,
  OMX_U32 nData2,
  OMX_PTR pEventData)
{
  COMXCoreComponent *ctx = static_cast<COMXCoreComponent*>(pAppData);

#ifdef OMX_DEBUG_EVENTS
  CLog::Log(LOGDEBUG,
    "COMXCore::%s - %s eEvent(0x%x), nData1(0x%lx), nData2(0x%lx), pEventData(0x%p)\n",
    __func__, (char *)ctx->GetName().c_str(), eEvent, nData1, nData2, pEventData);
#endif

  AddEvent(eEvent, nData1, nData2);

  switch (eEvent)
  {
    case OMX_EventCmdComplete:
      
      switch(nData1)
      {
        case OMX_CommandStateSet:
          switch ((int)nData2)
          {
            case OMX_StateInvalid:
            #if defined(OMX_DEBUG_EVENTHANDLER)
              CLog::Log(LOGDEBUG, "%s::%s %s - OMX_StateInvalid\n", CLASSNAME, __func__, ctx->GetName().c_str());
            #endif
            break;
            case OMX_StateLoaded:
            #if defined(OMX_DEBUG_EVENTHANDLER)
              CLog::Log(LOGDEBUG, "%s::%s %s - OMX_StateLoaded\n", CLASSNAME, __func__, ctx->GetName().c_str());
            #endif
            break;
            case OMX_StateIdle:
            #if defined(OMX_DEBUG_EVENTHANDLER)
              CLog::Log(LOGDEBUG, "%s::%s %s - OMX_StateIdle\n", CLASSNAME, __func__, ctx->GetName().c_str());
            #endif
            break;
            case OMX_StateExecuting:
            #if defined(OMX_DEBUG_EVENTHANDLER)
              CLog::Log(LOGDEBUG, "%s::%s %s - OMX_StateExecuting\n", CLASSNAME, __func__, ctx->GetName().c_str());
            #endif
            break;
            case OMX_StatePause:
            #if defined(OMX_DEBUG_EVENTHANDLER)
              CLog::Log(LOGDEBUG, "%s::%s %s - OMX_StatePause\n", CLASSNAME, __func__, ctx->GetName().c_str());
            #endif
            break;
            case OMX_StateWaitForResources:
            #if defined(OMX_DEBUG_EVENTHANDLER)
              CLog::Log(LOGDEBUG, "%s::%s %s - OMX_StateWaitForResources\n", CLASSNAME, __func__, ctx->GetName().c_str());
            #endif
            break;
            default:
            #if defined(OMX_DEBUG_EVENTHANDLER)
              CLog::Log(LOGDEBUG,
                "%s::%s %s - Unknown OMX_Statexxxxx, state(%d)\n", CLASSNAME, __func__, ctx->GetName().c_str(), (int)nData2);
            #endif
            break;
          }
        break;
        case OMX_CommandFlush:
          #if defined(OMX_DEBUG_EVENTHANDLER)
          CLog::Log(LOGDEBUG, "%s::%s %s - OMX_CommandFlush, port %d\n", CLASSNAME, __func__, ctx->GetName().c_str(), (int)nData2);
          #endif
        break;
        case OMX_CommandPortDisable:
          #if defined(OMX_DEBUG_EVENTHANDLER)
          CLog::Log(LOGDEBUG, "%s::%s %s - OMX_CommandPortDisable, nData1(0x%lx), port %d\n", CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2);
          #endif
        break;
        case OMX_CommandPortEnable:
          #if defined(OMX_DEBUG_EVENTHANDLER)
          CLog::Log(LOGDEBUG, "%s::%s %s - OMX_CommandPortEnable, nData1(0x%lx), port %d\n", CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2);
          #endif
        break;
        #if defined(OMX_DEBUG_EVENTHANDLER)
        case OMX_CommandMarkBuffer:
          CLog::Log(LOGDEBUG, "%s::%s %s - OMX_CommandMarkBuffer, nData1(0x%lx), port %d\n", CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2);
        break;
        #endif
      }
    break;
    case OMX_EventBufferFlag:
      #if defined(OMX_DEBUG_EVENTHANDLER)
      CLog::Log(LOGDEBUG, "%s::%s %s - OMX_EventBufferFlag(input)\n", CLASSNAME, __func__, ctx->GetName().c_str());
      #endif
      if(nData2 & OMX_BUFFERFLAG_EOS)
        ctx->m_eos = true;
    break;
    case OMX_EventPortSettingsChanged:
      #if defined(OMX_DEBUG_EVENTHANDLER)
      CLog::Log(LOGDEBUG, "%s::%s %s - OMX_EventPortSettingsChanged(output)\n", CLASSNAME, __func__, ctx->GetName().c_str());
      #endif
    break;
    #if defined(OMX_DEBUG_EVENTHANDLER)
    case OMX_EventMark:
      CLog::Log(LOGDEBUG, "%s::%s %s - OMX_EventMark\n", CLASSNAME, __func__, ctx->GetName().c_str());
    break;
    case OMX_EventResourcesAcquired:
      CLog::Log(LOGDEBUG, "%s::%s %s- OMX_EventResourcesAcquired\n", CLASSNAME, __func__, ctx->GetName().c_str());
    break;
    #endif
    case OMX_EventError:
      switch((OMX_S32)nData1)
      {
        case OMX_ErrorSameState:
        break;
        case OMX_ErrorInsufficientResources:
          CLog::Log(LOGERROR, "%s::%s %s - OMX_ErrorInsufficientResources, insufficient resources\n", CLASSNAME, __func__, ctx->GetName().c_str());
        break;
        case OMX_ErrorFormatNotDetected:
          CLog::Log(LOGERROR, "%s::%s %s - OMX_ErrorFormatNotDetected, cannot parse input stream\n", CLASSNAME, __func__, ctx->GetName().c_str());
        break;
        case OMX_ErrorPortUnpopulated:
          CLog::Log(LOGERROR, "%s::%s %s - OMX_ErrorPortUnpopulated port %d, cannot parse input stream\n", CLASSNAME, __func__, ctx->GetName().c_str(), (int)nData2);
        break;
        case OMX_ErrorStreamCorrupt:
          CLog::Log(LOGERROR, "%s::%s %s - OMX_ErrorStreamCorrupt, Bitstream corrupt\n", CLASSNAME, __func__, ctx->GetName().c_str());
        break;
        default:
          CLog::Log(LOGERROR, "%s::%s %s - OMX_EventError detected, nData1(0x%lx), port %d\n",  CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2);
        break;
      }
      sem_post(&ctx->m_omx_fill_buffer_done);
    break;
    default:
      CLog::Log(LOGWARNING, "%s::%s %s - Unknown eEvent(0x%x), nData1(0x%lx), port %d\n", CLASSNAME, __func__, ctx->GetName().c_str(), eEvent, nData1, (int)nData2);
    break;
  }

  return OMX_ErrorNone;
}
Example #2
0
// Component event handler -- OMX event callback
OMX_ERRORTYPE COMXCoreComponent::DecoderEventHandler(
        OMX_HANDLETYPE hComponent,
        OMX_PTR pAppData,
        OMX_EVENTTYPE eEvent,
        OMX_U32 nData1,
        OMX_U32 nData2,
        OMX_PTR pEventData)
{
    COMXCoreComponent *ctx = static_cast<COMXCoreComponent*>(pAppData);

#ifdef OMX_DEBUG_EVENTS
    Logger::LogOut(LOG_LEVEL_DEBUG,
            "COMXCore::%s - %s eEvent(0x%x), nData1(0x%lx), nData2(0x%lx), pEventData(0x%p)",
            __func__, (char *)ctx->GetName().c_str(), eEvent, nData1, nData2, pEventData);
#endif

    AddEvent(eEvent, nData1, nData2);

    switch (eEvent) {
    case OMX_EventCmdComplete:

        switch(nData1)
       {
       case OMX_CommandStateSet:
            switch ((int)nData2)
           {
           case OMX_StateInvalid:
           #if defined(OMX_DEBUG_EVENTHANDLER)
               Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_StateInvalid", CLASSNAME, __func__, ctx->GetName().c_str());
           #endif
               break;
           case OMX_StateLoaded:
           #if defined(OMX_DEBUG_EVENTHANDLER)
               Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_StateLoaded", CLASSNAME, __func__, ctx->GetName().c_str());
           #endif
               break;
           case OMX_StateIdle:
           #if defined(OMX_DEBUG_EVENTHANDLER)
               Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_StateIdle", CLASSNAME, __func__, ctx->GetName().c_str());
           #endif
               break;
           case OMX_StateExecuting:
           #if defined(OMX_DEBUG_EVENTHANDLER)
               Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_StateExecuting", CLASSNAME, __func__, ctx->GetName().c_str());
           #endif
               break;
            case OMX_StatePause:
           #if defined(OMX_DEBUG_EVENTHANDLER)
                Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_StatePause", CLASSNAME, __func__, ctx->GetName().c_str());
           #endif
                break;
            case OMX_StateWaitForResources:
           #if defined(OMX_DEBUG_EVENTHANDLER)
                Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_StateWaitForResources", CLASSNAME, __func__, ctx->GetName().c_str());
           #endif
                break;
            default:
           #if defined(OMX_DEBUG_EVENTHANDLER)
                Logger::LogOut(LOG_LEVEL_DEBUG,
                       "%s::%s %s - Unknown OMX_Statexxxxx, state(%d)", CLASSNAME, __func__, ctx->GetName().c_str(), (int)nData2);
           #endif
                break;
           }
           break;
           case OMX_CommandFlush:
           #if defined(OMX_DEBUG_EVENTHANDLER)
               Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_CommandFlush, port %d", CLASSNAME, __func__, ctx->GetName().c_str(), (int)nData2);
           #endif
               break;
           case OMX_CommandPortDisable:
           #if defined(OMX_DEBUG_EVENTHANDLER)
               Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_CommandPortDisable, nData1(0x%lx), port %d", CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2);
           #endif
               break;
           case OMX_CommandPortEnable:
           #if defined(OMX_DEBUG_EVENTHANDLER)
               Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_CommandPortEnable, nData1(0x%lx), port %d", CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2);
           #endif
               break;
           #if defined(OMX_DEBUG_EVENTHANDLER)
           case OMX_CommandMarkBuffer:
               Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_CommandMarkBuffer, nData1(0x%lx), port %d", CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2);
                break;
           #endif
        }
        break;
        case OMX_EventBufferFlag:
        #if defined(OMX_DEBUG_EVENTHANDLER)
           Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_EventBufferFlag(input)", CLASSNAME, __func__, ctx->GetName().c_str());
        #endif
           if(nData2 & OMX_BUFFERFLAG_EOS)
           {
                pthread_mutex_lock(&ctx->m_omx_eos_mutex);
                ctx->m_eos = true;
                pthread_mutex_unlock(&ctx->m_omx_eos_mutex);
           }
           break;
        case OMX_EventPortSettingsChanged:
        #if defined(OMX_DEBUG_EVENTHANDLER)
           Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_EventPortSettingsChanged(output)", CLASSNAME, __func__, ctx->GetName().c_str());
        #endif
        break;
        #if defined(OMX_DEBUG_EVENTHANDLER)
        case OMX_EventMark:
           Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s - OMX_EventMark", CLASSNAME, __func__, ctx->GetName().c_str());
           break;
        case OMX_EventResourcesAcquired:
           Logger::LogOut(LOG_LEVEL_DEBUG, "%s::%s %s- OMX_EventResourcesAcquired", CLASSNAME, __func__, ctx->GetName().c_str());
           break;
        #endif
        case OMX_EventError:
            switch((OMX_S32)nData1)
            {
            case OMX_ErrorSameState:
                //#if defined(OMX_DEBUG_EVENTHANDLER)
                //Logger::LogOut(LOG_LEVEL_ERROR, "%s::%s %s - OMX_ErrorSameState, same state", CLASSNAME, __func__, ctx->GetName().c_str());
                //#endif
                break;
            case OMX_ErrorInsufficientResources:
                Logger::LogOut(LOG_LEVEL_ERROR, "%s::%s %s - OMX_ErrorInsufficientResources, insufficient resources", CLASSNAME, __func__, ctx->GetName().c_str());
                ctx->m_resource_error = true;
                break;
            case OMX_ErrorFormatNotDetected:
                Logger::LogOut(LOG_LEVEL_ERROR, "%s::%s %s - OMX_ErrorFormatNotDetected, cannot parse input stream", CLASSNAME, __func__, ctx->GetName().c_str());
                break;
            case OMX_ErrorPortUnpopulated:
                Logger::LogOut(LOG_LEVEL_ERROR, "%s::%s %s - OMX_ErrorPortUnpopulated port %d, cannot parse input stream", CLASSNAME, __func__, ctx->GetName().c_str(), (int)nData2);
                break;
            case OMX_ErrorStreamCorrupt:
                Logger::LogOut(LOG_LEVEL_ERROR, "%s::%s %s - OMX_ErrorStreamCorrupt, Bitstream corrupt", CLASSNAME, __func__, ctx->GetName().c_str());
                break;
            case OMX_ErrorUnsupportedSetting:
                Logger::LogOut(LOG_LEVEL_ERROR, "%s::%s %s - OMX_ErrorUnsupportedSetting, unsupported setting", CLASSNAME, __func__, ctx->GetName().c_str());
                break;
            default:
                Logger::LogOut(LOG_LEVEL_ERROR, "%s::%s %s - OMX_EventError detected, nData1(0x%x), port %d",  CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2);
                break;
           }
           break;
           default:
                Logger::LogOut(LOG_LEVEL_ERROR, "%s::%s %s - Unknown eEvent(0x%x), nData1(0x%x), port %d", CLASSNAME, __func__, ctx->GetName().c_str(), eEvent, nData1, (int)nData2);
                break;
    }

    return OMX_ErrorNone;
}