OMX_ERRORTYPE ResourceExhaustionTest_EventHandler(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_PTR pAppData, OMX_IN OMX_EVENTTYPE eEvent, OMX_IN OMX_U32 nData1, OMX_IN OMX_U32 nData2, OMX_IN OMX_PTR pEventData) { ResourceExhaustionTestContext *pCtxt; UNUSED_PARAMETER(hComponent); UNUSED_PARAMETER(pEventData); if (pAppData == NULL) return OMX_ErrorNone; pCtxt = (ResourceExhaustionTestContext *)pAppData; if (eEvent == OMX_EventCmdComplete) { switch ((OMX_COMMANDTYPE)(nData1)) { case OMX_CommandStateSet: OMX_CONF_StateToString((OMX_STATETYPE)(nData2), szDesc); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Instance %d transitioned to %s\n", pCtxt->nInst, szDesc); OMX_OSAL_EventSet(pCtxt->hStateSetEvent); break; default: break; } } else if (eEvent == OMX_EventError) { pCtxt->eLastError = (OMX_ERRORTYPE)(nData1); OMX_CONF_ErrorToString(pCtxt->eLastError, szDesc); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Instance %d sent error %0#x %s\n", pCtxt->nInst, nData1, szDesc); OMX_OSAL_EventSet(pCtxt->hStateSetEvent); } return OMX_ErrorNone; }
OMX_ERRORTYPE OMX_CONF_ComponentNameTest(OMX_IN OMX_STRING cComponentName) { OMX_ERRORTYPE eError = OMX_ErrorNone; OMX_HANDLETYPE hComp = 0; OMX_U32 i = 0; OMX_BOOL bNameValid = OMX_FALSE; OMX_BOOL bFound = OMX_FALSE; OMX_S8 cCompEnumName[TEST_COMPONENT_NAME_SIZE]; OMX_CALLBACKTYPE sCallbacks; sCallbacks.EventHandler = ComponentNameTest_EventHandler; sCallbacks.EmptyBufferDone = ComponentNameTest_EmptyBufferDone; sCallbacks.FillBufferDone = ComponentNameTest_FillBufferDone; /* Initialize OpenMax */ eError = OMX_Init(); if (eError != OMX_ErrorNone) { goto OMX_CONF_TEST_BAIL; } while (OMX_ErrorNone == eError) { /* loop through all enumerated components to determine if the component name specificed for the test is enumerated by the OMX core */ eError = OMX_ComponentNameEnum((OMX_STRING) cCompEnumName, TEST_COMPONENT_NAME_SIZE, i); if (OMX_ErrorNone == eError) { OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "OMX_ComponenNameEnum enumerated %s at index %i\n", cCompEnumName, i); if (!strcmp((OMX_STRING) cCompEnumName, cComponentName)) { /* component name enumerated by OMX_CORE */ bFound = OMX_TRUE; eError = OMX_GetHandle(&hComp, (OMX_STRING) cCompEnumName, 0x0, &sCallbacks); if (eError == OMX_ErrorNone) { /* validate the first 4 characters of the name match the OMX standard */ if (!strncmp("OMX.", cComponentName, 4)) { bNameValid = OMX_TRUE; } eError = OMX_FreeHandle(hComp); } else { OMX_CONF_ErrorToString(eError, szDesc); OMX_OSAL_Trace(OMX_OSAL_TRACE_ERROR, "%s error=0x%X (%s) from OMX_GetHandle\n", cCompEnumName, eError, szDesc); } } } else if (OMX_ErrorNoMore != eError) { /* OMX_CORE reported unexpected error other than no more components */ OMX_CONF_ErrorToString(eError, szDesc); OMX_OSAL_Trace(OMX_OSAL_TRACE_ERROR, "unexepected error=0x%X (%s) from OMX_ComponenNameEnum\n", eError, szDesc); } i++; } if (OMX_ErrorNoMore == eError) { /* not an error, so clear the error code */ eError = OMX_ErrorNone; } OMX_CONF_TEST_BAIL: if (OMX_ErrorNone == eError) { eError = OMX_Deinit(); } else { OMX_Deinit(); } return eError; }
OMX_ERRORTYPE BufferTest_EventHandler( OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_PTR pAppData, OMX_IN OMX_EVENTTYPE eEvent, OMX_IN OMX_U32 nData1, OMX_IN OMX_U32 nData2, OMX_IN OMX_PTR pEventData) { TEST_CTXTYPE *pCtx; UNUSED_PARAMETER(hComponent); UNUSED_PARAMETER(pEventData); if (0x0 == pAppData) return(OMX_ErrorNone); pCtx = (TEST_CTXTYPE*)pAppData; if (OMX_EventCmdComplete == eEvent) { switch ((OMX_COMMANDTYPE)(nData1)) { case OMX_CommandStateSet: OMX_CONF_StateToString((OMX_STATETYPE)(nData2), szDesc); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Component transitioned to %s\n", szDesc); pCtx->eState = (OMX_STATETYPE)(nData2); OMX_OSAL_EventSet(pCtx->hStateChangeEvent); break; case OMX_CommandPortDisable: OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Port %i completed disable\n", nData2); if (OMX_TRUE == pCtx->bStopAllPorts) { pCtx->nNumPortsStopped++; if (pCtx->nNumPortsStopped == pCtx->nNumPorts) { OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "All ports completed disable\n"); OMX_OSAL_EventSet(pCtx->hPortDisableEvent); } } else if (pCtx->nStopPort == nData2) { OMX_OSAL_EventSet(pCtx->hPortDisableEvent); } break; case OMX_CommandPortEnable: OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Port %i completed enable\n", nData2); if (OMX_TRUE == pCtx->bRestartAllPorts) { pCtx->nNumPortsRestarted++; if (pCtx->nNumPortsRestarted == pCtx->nNumPorts) { OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "All ports completed enable\n"); OMX_OSAL_EventSet(pCtx->hPortEnableEvent); } } else if (pCtx->nRestartPort == nData2) { OMX_OSAL_EventSet(pCtx->hPortEnableEvent); } break; case OMX_EventBufferFlag: break; default: break; } } else if (OMX_EventError == eEvent) { OMX_CONF_ErrorToString((OMX_ERRORTYPE)nData1, szDesc); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Component reported error %s (0x%x)\n", szDesc, nData2); if (OMX_ErrorPortUnpopulated == nData1) { OMX_OSAL_EventSet(pCtx->hPortErrorEvent); } } return OMX_ErrorNone; }
OMX_ERRORTYPE OMX_CONF_TestComponent( OMX_IN OMX_STRING sComponentName, OMX_BOOL *bPassed) { OMX_U32 i; OMX_ERRORTYPE eError; char szDesc[256]; OMX_U32 nPassedTests, nFailedTests; OMX_U32 testId; if (!OMX_CONF_ComponentExists(sComponentName)){ OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, "Cannot find component %s, all tests FAILED\n", sComponentName); return OMX_ErrorUndefined; } /* initialize passed and failed test counters */ nPassedTests = 0; nFailedTests = 0; OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "\nOMX_CONF_TestComponent %s\n\n", sComponentName); /* Run each test in current list on component */ for (i=0;i<g_OMX_CONF_nTests;i++) { /* get test id */ testId = g_OMX_CONF_TestIndexList[i]; /* emit test header */ OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "\n"); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "##\n"); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "## %s \n", g_OMX_CONF_TestLookupTable[testId].pName ); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "##\n"); /* perform test */ eError = g_OMX_CONF_TestLookupTable[testId].pFunc(sComponentName); /* emit test result */ if( OMX_ErrorNone != eError ) { OMX_CONF_ErrorToString( eError, szDesc ); OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " %s %s FAILED, %x %s\n", g_OMX_CONF_TestLookupTable[testId].pName, sComponentName, eError, szDesc); bPassed[i] = OMX_FALSE; nFailedTests++; } else { OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " %s %s PASSED\n", g_OMX_CONF_TestLookupTable[testId].pName, sComponentName); bPassed[i] = OMX_TRUE; nPassedTests++; } } OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, "\n"); OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " \n"); OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " Summary for %s\n", sComponentName); OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " \n"); /* Report passed tests */ OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " %i tests passed:\n", nPassedTests); for (i=0;i<g_OMX_CONF_nTests;i++) { /* if passed emit test name */ if (bPassed[i]){ testId = g_OMX_CONF_TestIndexList[i]; OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " \t%s\n", g_OMX_CONF_TestLookupTable[testId].pName); } } /* Report failed tests */ OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " \n"); OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " %i tests failed: \n", nFailedTests); for (i=0;i<g_OMX_CONF_nTests;i++) { /* if failed emit test name */ if (!bPassed[i]){ testId = g_OMX_CONF_TestIndexList[i]; OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " \t%s\n", g_OMX_CONF_TestLookupTable[testId].pName); } } OMX_OSAL_Trace(OMX_OSAL_TRACE_PASSFAIL, " \n"); return OMX_ErrorNone; }
OMX_ERRORTYPE PortCommTest_OperateOnPorts(PortCommTestCtxt* pContext, PortOpType eOp) { OMX_PARAM_PORTDEFINITIONTYPE sPortDef; OMX_ERRORTYPE eError = OMX_ErrorNone; OMX_U32 i, j; OMX_BUFFERHEADERTYPE sBufHdr; for (j = 0; j < NUM_DOMAINS; j++) { for (i = pContext->sPortParam[j].nStartPortNumber; i < pContext->sPortParam[j].nStartPortNumber + pContext->sPortParam[j].nPorts; i++) { OMX_CONF_INIT_STRUCT(sPortDef, OMX_PARAM_PORTDEFINITIONTYPE); sPortDef.nPortIndex = i; OMX_CONF_BAIL_IF_ERROR(OMX_GetParameter(pContext->hWComp, OMX_IndexParamPortDefinition , (OMX_PTR)&sPortDef)); switch (eOp) { case AllocBuf: if (0x0 == sPortDef.nBufferCountMin || sPortDef.nBufferCountMin > sPortDef.nBufferCountActual) { OMX_CONF_SET_ERROR_BAIL("PortDefinition nBufferCount incorrect\n", OMX_ErrorUndefined); } OMX_CONF_BAIL_IF_ERROR(PortCommTest_AllocateBuffers(pContext, &sPortDef)); break; case NonTunnelTest: if (sPortDef.eDir == OMX_DirInput) { eError = OMX_SetupTunnel(NULL, 0, pContext->hWComp, sPortDef.nPortIndex); OMX_CONF_ErrorToString(eError, szDesc); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Setup tunnel reported error code %s\n", szDesc); } else { eError = OMX_SetupTunnel(pContext->hWComp, sPortDef.nPortIndex, NULL, 0); OMX_CONF_ErrorToString(eError, szDesc); OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Setup tunnel reported error code %s\n", szDesc); } eError = OMX_ErrorNone; break; case OpenFile: /* set buffercount actual */ if (0x0 == sPortDef.nBufferCountMin || sPortDef.nBufferCountMin > sPortDef.nBufferCountActual) { OMX_CONF_SET_ERROR_BAIL("PortDefinition nBufferCount incorrect\n", OMX_ErrorUndefined); } sPortDef.nBufferCountActual = sPortDef.nBufferCountMin + 1; OMX_CONF_BAIL_IF_ERROR(OMX_SetParameter(pContext->hWComp, OMX_IndexParamPortDefinition, (OMX_PTR)&sPortDef)); /* open files for input ports */ if (sPortDef.eDir == OMX_DirInput) { OMX_OSAL_Trace(OMX_OSAL_TRACE_INFO, "Opened input file for port %d\n", i); OMX_CONF_BAIL_IF_ERROR(OMX_OSAL_OpenInputFile(i)); } break; case CloseFile: if (sPortDef.eDir == OMX_DirInput) { OMX_CONF_BAIL_IF_ERROR(OMX_OSAL_CloseInputFile(i)); } break; case EmptyFill: OMX_CONF_INIT_STRUCT(sBufHdr, OMX_BUFFERHEADERTYPE); if (sPortDef.eDir == OMX_DirInput) { sBufHdr.nInputPortIndex = i; eError = OMX_EmptyThisBuffer(pContext->hWComp, &sBufHdr); } else { sBufHdr.nOutputPortIndex = i; eError = OMX_FillThisBuffer(pContext->hWComp, &sBufHdr); } if (eError != OMX_ErrorIncorrectStateOperation) OMX_CONF_SET_ERROR_BAIL("Buffer handling while stopped\n", OMX_ErrorUndefined); eError = OMX_ErrorNone; break; default: eError = OMX_ErrorBadParameter; } } } OMX_CONF_TEST_BAIL: return eError; }