call 顺序

1) OMX core初始化
OMX_Init()
OMX_ComponentNameEnum()
OMX_GetRolesOfComponent()

2) OMX Component instantiation, capabilities and port indices
 利用OMX_GetHandle()调用来实例化想要的OMX组件
 利用OMX_GetParameter(PV_OMX_CAPABILITY_TYPE_INDEX)调用来获取OMX组件的能力和OMX组件上可用端口的数量
 OMX_GetParameter(OMX_IndexVideoInit/OMX_IndexAudioInit)
 遍历可用的端口以查找输入端口的索引OMX_GetParameter(OMX_IndexParamPortDefinition)
 遍历可用的端口以查找输出端口的索引
 
3)OMX component input and output buffer negotiation
 调用OMX_GetParameter来获取input port buffer参数
  核实(verify) input buffer参数的有效性
  调用OMX_SetParameter来设置input buffer参数
 调用OMX_GetParameter来获取output port buffer参数
  核实(verify) output buffer参数的有效性
  调用OMX_SetParameter来设置output buffer参数 
  
4) OMX Transition Loaded->Idel State
 调用OMX_SendCommand向OMX组件发送命令以改变组件状态(Loaded->Idel)
 调用OMX_UseBuffer或OMX_AllocateBuffer向OMX组件发送命令。 (Buffer分配)
 等待组件的EventHandler回调OMX_EventCmdComplete。这个callback通知框架组件的状态转换已经完成。

5) Transition to “Executing” state and data exchange 
 OMX_SendCommand (Executing)
 等待EventHandler回调OMX_EventCmdComplete 
 OMX_EmptyThisBuffer、OMX_FillThisBuffer设置输入输出buffer
 Callback EmptyBufferDone FillBufferDone
{
    组件缓冲处理

    当组件完成数据输出(Fill Buffer)后会调用FillBufferDone回调函数以通知应用层准备数据(仅非Tunneled模式)
    函数C代码原型:
    FillBufferDone(OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_BUFFERHEADERTYPE *pBuffer)
    其中hComponent是组件句柄;pAppData为GetHandle时赋入的应用数据;pBuffer为缓冲地址。由于该缓冲已经填写完毕(通常是一帧完成),回调函数将改数据输出到适当位置,完后再次调用OMX_FillThisBuffer,链入下一轮工作。

    当组件完成数据消耗(Empty Buffer)后会调用EmptyBufferDone回调函数以通知应用层准备数据(仅非Tunneled模式)
    函数C代码原型:
    EmptyBufferDone(OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_BUFFERHEADERTYPE *pBuffer)
    三个参数含义同上。由于改缓冲已经消耗殆尽,回调函数将读入数据载入缓冲,完后再次调用OMX_EmptyThisBuffer,链入下一轮工作。

    上述缓冲操作是组件运行的一个环节,OpenMAX组件运行于一个独立线程。
}
6) Pausing  <--> Executing 互相切换
 OMX_SendCommand (EXECUTE)
 等待EventHandler回调OMX_EventCmdComplete 
 OMX_SendCommand (PAUSE)
 等待EventHandler回调OMX_EventCmdComplete 

7) Port flush (if need)
  OMX_SendCommand (FlushPort)
  OMX_EventCmdComplete 两次,第二次后可以继续I/O
  
8) Stopping/Transition to “Idle” state
  OMX_SendCommand (OMX_StateExecuting/OMX_StatePause to OMX_StateIdle)
  EventHandler回调OMX_EventCmdComplete

 收尾工作1:命令并等待组件进入Idle状态
 收尾工作2:命令并等待组件进入Loaded状态,并销毁Buffer  OMX_FreeBuffe()
 释放组件句柄OMX_Deinit()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值