/* ===========================================================================*/ RPC_OMX_ERRORTYPE RPC_SKEL_EventHandler(void *data) { OMX_HANDLETYPE hComp; RPC_OMX_ERRORTYPE tRPCError = RPC_OMX_ErrorNone; OMX_COMPONENTTYPE *pHandle = NULL; PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; OMX_EVENTTYPE eEvent; OMX_U32 nData1; OMX_U32 nData2; OMX_PTR pEventData; OMX_U32 nPos = 0; //RPC_OMX_MESSAGE *recdMsg; OMX_U8 *pMsgBody = NULL; //recdMsg = (RPC_OMX_MESSAGE *) (data); pMsgBody = data; //&recdMsg->msgBody[0]; DOMX_ENTER(""); //Marshalled:[>hComp|>eEvent|>nData1|>nData2|>pEventData] RPC_GETFIELDVALUE(pMsgBody, nPos, hComp, OMX_HANDLETYPE); pHandle = (OMX_COMPONENTTYPE *) hComp; pCompPrv = (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; RPC_GETFIELDVALUE(pMsgBody, nPos, eEvent, OMX_EVENTTYPE); RPC_GETFIELDVALUE(pMsgBody, nPos, nData1, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, nPos, nData2, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, nPos, pEventData, OMX_PTR); DOMX_DEBUG ("\n**__**Got eventhandler from Remote Core succesffuly - values are : **__**"); DOMX_DEBUG ("hComp :0x%x,eEvent: 0x%x,nData1: 0x%x,nData2: 0x%x,pEventData: 0x%x", hComp, eEvent, nData1, nData2, pEventData); DOMX_DEBUG("Just Before Entering Proxy Event handler call"); tRPCError = pCompPrv->proxyEventHandler(hComp, pCompPrv->pILAppData, eEvent, nData1, nData2, pEventData); DOMX_EXIT(""); return tRPCError; }
/* ===========================================================================*/ RPC_OMX_ERRORTYPE RPC_SKEL_EmptyBufferDone(void *data) { OMX_HANDLETYPE hComp; RPC_OMX_ERRORTYPE tRPCError = RPC_OMX_ErrorNone; OMX_U32 nfilledLen = 0; OMX_U32 nOffset = 0; OMX_U32 nFlags = 0; OMX_U32 bufferHdr; OMX_COMPONENTTYPE *pHandle = NULL; PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; OMX_U32 nPos = 0; //RPC_OMX_MESSAGE *recdMsg; OMX_U8 *pMsgBody = NULL; //recdMsg = (RPC_OMX_MESSAGE *) (data); pMsgBody = data; //&recdMsg->msgBody[0]; DOMX_ENTER(""); //Marshalled:[>hComp|>bufferHdr|>nFilledLen|>nOffset|>nFlags] RPC_GETFIELDVALUE(pMsgBody, nPos, hComp, OMX_HANDLETYPE); pHandle = (OMX_COMPONENTTYPE *) hComp; pCompPrv = (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; RPC_GETFIELDVALUE(pMsgBody, nPos, bufferHdr, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, nPos, nfilledLen, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, nPos, nOffset, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, nPos, nFlags, OMX_U32); tRPCError = pCompPrv->proxyEmptyBufferDone(hComp, bufferHdr, nfilledLen, nOffset, nFlags); DOMX_EXIT(""); return tRPCError; }
/* ===========================================================================*/ RPC_OMX_ERRORTYPE RPC_AllocateBuffer(RPC_OMX_HANDLE hRPCCtx, OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_IN OMX_U32 nPortIndex, OMX_U32 * pBufHeaderRemote, OMX_U32 * pBufferMapped, OMX_PTR pAppPrivate, OMX_U32 nSizeBytes, OMX_ERRORTYPE * eCompReturn) { RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; RcmClient_Message *pPacket = NULL; RcmClient_Message *pRetPacket = NULL; OMX_U32 nPacketSize = PACKET_SIZE; RPC_OMX_MESSAGE *pRPCMsg = NULL; RPC_OMX_BYTE *pMsgBody; RPC_INDEX fxnIdx; OMX_U32 nPos = 0; OMX_S16 status; RPC_OMX_CONTEXT *hCtx = hRPCCtx; RPC_OMX_HANDLE hComp = hCtx->remoteHandle; OMX_U32 offset = 0; OMX_TI_PLATFORMPRIVATE *pPlatformPrivate = NULL; OMX_BUFFERHEADERTYPE *pBufferHdr = *ppBufferHdr; DOMX_ENTER(""); RPC_exitOnDucatiFault(); fxnIdx = rpcHndl[TARGET_CORE_ID].rpcFxns[RPC_OMX_FXN_IDX_ALLOCATE_BUFFER]. rpcFxnIdx; RPC_getPacket(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], nPacketSize, pPacket); pRPCMsg = (RPC_OMX_MESSAGE *) (&pPacket->data); pMsgBody = &pRPCMsg->msgBody[0]; //Marshalled:[>hComp|>nPortIndex|>pAppPrivate|>nSizeBytes| //<pBufHeaderRemote|<offset(BufHeaderRemotecontents)|<offset(platformprivate)| //<--BufHeaderRemotecontents--|!<--pPlatformPrivate--] RPC_SETFIELDVALUE(pMsgBody, nPos, hComp, RPC_OMX_HANDLE); RPC_SETFIELDVALUE(pMsgBody, nPos, nPortIndex, OMX_U32); RPC_SETFIELDVALUE(pMsgBody, nPos, pAppPrivate, OMX_PTR); RPC_SETFIELDVALUE(pMsgBody, nPos, nSizeBytes, OMX_U32); pPacket->poolId = hCtx->nPoolId; pPacket->jobId = hCtx->nJobId; RPC_sendPacket_sync(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket, fxnIdx, pRetPacket); pRPCMsg = (RPC_OMX_MESSAGE *) (&pRetPacket->data); pMsgBody = &pRPCMsg->msgBody[0]; *eCompReturn = pRPCMsg->msgHeader.nOMXReturn; if (pRPCMsg->msgHeader.nOMXReturn == OMX_ErrorNone) { RPC_GETFIELDVALUE(pMsgBody, nPos, *pBufHeaderRemote, OMX_U32); RPC_GETFIELDOFFSET(pMsgBody, nPos, offset, OMX_U32); //save platform private before overwriting pPlatformPrivate = (*ppBufferHdr)->pPlatformPrivate; //RPC_GETFIELDCOPYTYPE(pMsgBody, offset, pBufferHdr, OMX_BUFFERHEADERTYPE); /*Copying each field of the header separately due to padding issues in the buffer header structure */ RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nSize, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nVersion, OMX_VERSIONTYPE); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->pBuffer, OMX_U8 *); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nAllocLen, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nFilledLen, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nOffset, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->pAppPrivate, OMX_PTR); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->pPlatformPrivate, OMX_PTR); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->pInputPortPrivate, OMX_PTR); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->pOutputPortPrivate, OMX_PTR); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->hMarkTargetComponent, OMX_HANDLETYPE); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->pMarkData, OMX_PTR); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nTickCount, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nTimeStamp, OMX_TICKS); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nFlags, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nInputPortIndex, OMX_U32); RPC_GETFIELDVALUE(pMsgBody, offset, pBufferHdr->nOutputPortIndex, OMX_U32); (*ppBufferHdr)->pPlatformPrivate = pPlatformPrivate; #ifdef TILER_BUFF DOMX_DEBUG(" Copying plat pvt. "); RPC_GETFIELDOFFSET(pMsgBody, nPos, offset, OMX_U32); if (offset != 0) { RPC_GETFIELDCOPYTYPE(pMsgBody, offset, (OMX_TI_PLATFORMPRIVATE *) ((*ppBufferHdr)->pPlatformPrivate), OMX_TI_PLATFORMPRIVATE); DOMX_DEBUG("Done copying plat pvt., aux buf = 0x%x", ((OMX_TI_PLATFORMPRIVATE *) ((*ppBufferHdr)-> pPlatformPrivate))->pAuxBuf1); } #endif *pBufferMapped = (OMX_U32) (*ppBufferHdr)->pBuffer; } else
/* ===========================================================================*/ RPC_OMX_ERRORTYPE RPC_GetHandle(RPC_OMX_HANDLE hRPCCtx, OMX_STRING cComponentName, OMX_PTR pAppData, OMX_CALLBACKTYPE * pCallBacks, OMX_ERRORTYPE * eCompReturn) { RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; RPC_OMX_MESSAGE *pRPCMsg = NULL; RPC_OMX_BYTE *pMsgBody = NULL; OMX_U32 dataOffset = 0; OMX_U32 dataOffset2 = 0; OMX_U32 offset = 0; OMX_U32 nPacketSize = PACKET_SIZE; RcmClient_Message *pPacket = NULL; RcmClient_Message *pRetPacket = NULL; OMX_U32 nPos = 0; RPC_OMX_CONTEXT *hCtx = hRPCCtx; RPC_OMX_HANDLE hComp = NULL; OMX_HANDLETYPE hActualComp = NULL; OMX_S16 status; RPC_INDEX fxnIdx; OMX_STRING CallingCorercmServerName; OMX_S32 pid = 0; //For TILER memory allocation changes DOMX_ENTER(""); DOMX_DEBUG("RPC_GetHandle: Recieved GetHandle request from %s", cComponentName); RPC_exitOnDucatiFault(); RPC_UTIL_GetLocalServerName(cComponentName, &CallingCorercmServerName); DOMX_DEBUG(" RCM Server Name Calling on Current Core: %s", CallingCorercmServerName); fxnIdx = rpcHndl[TARGET_CORE_ID].rpcFxns[RPC_OMX_FXN_IDX_GET_HANDLE]. rpcFxnIdx; //Allocating remote command message RPC_getPacket(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], nPacketSize, pPacket); pRPCMsg = (RPC_OMX_MESSAGE *) (&pPacket->data); pMsgBody = &pRPCMsg->msgBody[0]; //Marshalled:[>offset(cParameterName)|>pAppData|>offset(CallingCorercmServerName)|>pid| //>--cComponentName--|>--CallingCorercmServerName--| //<hComp] dataOffset = sizeof(OMX_U32) + sizeof(OMX_PTR) + sizeof(OMX_U32) + sizeof(OMX_S32); RPC_SETFIELDOFFSET(pMsgBody, nPos, dataOffset, OMX_U32); //To update with RPC macros strcpy((char *)(pMsgBody + dataOffset), cComponentName); RPC_SETFIELDVALUE(pMsgBody, nPos, pAppData, OMX_PTR); dataOffset2 = dataOffset + 128; //max size of omx comp name RPC_SETFIELDOFFSET(pMsgBody, nPos, dataOffset2, OMX_U32); //To update with RPC macros strcpy((char *)(pMsgBody + dataOffset2), CallingCorercmServerName); //Towards TILER memory allocation changes pid = getpid(); RPC_SETFIELDVALUE(pMsgBody, nPos, pid, OMX_S32); pPacket->poolId = hCtx->nPoolId; pPacket->jobId = hCtx->nJobId; RPC_sendPacket_sync(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket, fxnIdx, pRetPacket); pRPCMsg = (RPC_OMX_MESSAGE *) (&pRetPacket->data); pMsgBody = &pRPCMsg->msgBody[0]; *eCompReturn = pRPCMsg->msgHeader.nOMXReturn; if (*eCompReturn == OMX_ErrorNone) { offset = dataOffset2 + 32; //max size of rcm server name RPC_GETFIELDVALUE(pMsgBody, offset, hComp, RPC_OMX_HANDLE); DOMX_DEBUG("Received Remote Handle 0x%x", hComp); hCtx->remoteHandle = hComp; /* The handle received above is used for all communications with the remote component but is not the actual component handle (it is actually the rpc context handle which contains lot of other info). The handle recd. below is the actual remote component handle. This is used at present for mark buffer implementation since in that case it is not feasible to send the context handle */ RPC_GETFIELDVALUE(pMsgBody, offset, hActualComp, OMX_HANDLETYPE); hCtx->hActualRemoteCompHandle = hActualComp; } RPC_freePacket(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pRetPacket); EXIT: DOMX_EXIT(""); return eRPCError; }