// 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) { 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) 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: //#if defined(OMX_DEBUG_EVENTHANDLER) //CLog::Log(LOGERROR, "%s::%s %s - OMX_ErrorSameState, same state\n", CLASSNAME, __func__, ctx->GetName().c_str()); //#endif break; case OMX_ErrorInsufficientResources: CLog::Log(LOGERROR, "%s::%s %s - OMX_ErrorInsufficientResources, insufficient resources\n", CLASSNAME, __func__, ctx->GetName().c_str()); ctx->m_resource_error = true; 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; case OMX_ErrorUnsupportedSetting: CLog::Log(LOGERROR, "%s::%s %s - OMX_ErrorUnsupportedSetting, unsupported setting\n", CLASSNAME, __func__, ctx->GetName().c_str()); break; default: CLog::Log(LOGERROR, "%s::%s %s - OMX_EventError detected, nData1(0x%x), port %d\n", CLASSNAME, __func__, ctx->GetName().c_str(), nData1, (int)nData2); break; } break; default: CLog::Log(LOGWARNING, "%s::%s %s - Unknown eEvent(0x%x), nData1(0x%x), port %d\n", CLASSNAME, __func__, ctx->GetName().c_str(), eEvent, nData1, (int)nData2); break; } return OMX_ErrorNone; }