OMX_Init() 没有什么好说的,初始化函数,一定要运行的. OMX_GetHandle 得到某一个组件的句柄 OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_GetHandle( OMX_GetExtensionIndex 除了标准OMX_INDEXTYPE中定义的以外,返回用户自定义的一些参数(第二个参数)对应的index(第三个参数,用在OMX_SetParameter...里面),用来configur或者parameter. 这些参数往往被定义在用户特殊的extension interface里面 #define OMX_GetExtensionIndex( \ OMX_SetParameter 设定某个参数对应的值 #define OMX_SetParameter( \ OMX_SetConfig 设定某个config值 #define OMX_SetConfig( \ 注意有时候,需要先停止某个组件(的某些端口),才能设置config 成功 OMX_SendCommand 一般的命令有: OMX_CommandStateSet 、OMX_CommandFlush、OMX_CommandPortDisable" 、 "OMX_CommandPortEnable、CommandMarkBuffer #define OMX_SendCommand( \ 例子:OMXSAFE(OMX_SendCommand(vrenderer, OMX_CommandPortEnable, 1, 0)); // 停下1对应的端口 OMX_SetupTunnel 将两个组件连接起来,实际会引起调用每个组件的ComponentTunnelRequest OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_SetupTunnel( 例子: OMXSAFE(OMX_SetupTunnel(reader, 0, vdecoder, 0)); // reader的0端口为出,vdecoder的0端口为入,连接成一个Tunnel 准备好后,就可以设置OMX_StateExecuting,来让这个流程活动起来了。 再以后,就可以通过OMX_StateIdle 来停下。 OMX_GetState #define OMX_GetState( \ 一些新补充: 1: OMX_PARAM_PORTDEFINITIONTYPE decOutputPortDef; INIT_PARAM(decOutputPortDef); err = OMX_GetParameter(pCtx->hReaderComp, videoWidth = decOutputPortDef.format.video.nFrameWidth; 2:OMX_BUFFERHEADERTYPE *pOmxBufferHeader ; // tell decoder output port that it will be using our buffer err = OMX_UseBuffer(hDecodeComp, 将分配好的pOut指针和他的大小outSize,配成一个OMX_BUF, 并给pOmxBufferHeader,这样就通过OMX_UseBuffer,来得到一个以后能给他用的Buffer,指针用我们分配的。 3: OMXErr = OMX_FillThisBuffer(hDecodeComp, pOmxBufferHeader); 让hDecodeComp将pOmxBufferHeader的数据准备好(就是输出数据),pOmxBufferHeader就是通过UseBuffer来组装的。 通过nFilledLen,可以得到具体数据填充情况。 如果OMX_FillThisBuffer是异步函数的话,那真正的返回是要靠:Callback_FillBufferDone 来设置真正数据ready信号 4: |
|