一、应用线程基本流程
1. OMX_Init()
2. 获取句柄,组件转到Loaded状态
OMX_GetHandle(out handle, in componentName, in appData, in callbacks);
其中callbacks结构包括三个回调函数指针(作用后文介绍):
1) EventHandler
2) EmptyBufferDone
3) FillBufferDone
3. 参数交互
如:
OMX_GetParameter(in handle, in type, out param);
OMX_SetParameter(in handle, in type, in param);
其中关键需要设置每个端口上的Buffer数量,一般采用2个Buffer,如下对端口参数进行设置:
paramPort.nBufferCountActual = 2;
具体参数详见后文介绍
4. 命令组件转到Idle状态
OMX_SendCommand(in handle, in cmd = OMX_CommandStateSet, in nParam = OMX_StateIdle, in pCmdData = 0);
5. Idle期准备
包括:
1) Buffer分配
2) 等待组件正式转到Idle状态,这个由信号量控制。这个信号量在上述EventHandler回调函数中put,而这个回调函数在状态转换完毕以后作为OMX_EventCmdComplete事件的响应被调用。
6. 组件转到Executing状态
OMX_SendCommand(in handle, in cmd = OMX_CommandStateSet, in nParam = OMX_StateExecuting, in pCmdData = 0);
命令组件转到Executing状态
等待转换完成,同样用信号量控制。
7. 初始化端口Buffer并绑定
通过调用OMX_FillThisBuffer设置组件的输出Buffer
通过调用OMX_EmptyThisBuffer设置组件的输入Buffer,此处可为输入Buffer加载初始数据流。
8. 主线程消息循环
在这里等待应用信号量,其中包括组件完毕的消息,用以退出循环。
9. 收尾工作1:命令并等待组件进入Idle状态
10. 收尾工作2:命令并等待组件进入Loaded状态,并销毁Buffer
11. 释放组件句柄
OpenMAX大意 一 应用线程基本流程
最新推荐文章于 2022-05-17 22:29:27 发布