织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>嵌入式开发>Android>

Opencore and OMX core/component interaction (二)

落鹤生 发布于 2013-06-12 20:27 点击:次 
在 PCMF 没有重新将 buffer 分配给 omx component 之前, component 不能对一个 buffer 进行多次返回。一旦 component 返回 buffer ,在 PCMF 没有使用 emptythisbuffer 或者 fillthisbuffer 将这个 buffer 的所有权分给 component 之前, component 不能对 buffer 进行
TAG:

3.5 进入 Idle 状态以后, OMX component 就可以进入执行状态处理数据 ,并与 PVMF 进行数据交换。

@首先 PVMF 还是发送 command 给 omx component 来改变状态,从 OMX_StateIdle 到 OMX_Executing 。

@同样 PVMF 会等待 component 通过 EventHandler callback 返回的 OMX_EventCmdComplete ,表明 component 已经完成状态转换。

@进入执行状态以后, PCMF 会通过 OMX_EmptyThisBuffer() 来向 component 的某个 input port 发送数据,并要求 component 取得 buffer 中的数据进行处理 , 同时通过 OMX_FillThisBuffer() 要求 component 向其的某个 output port 填充解码或者编码完的数据。 Component 会通过 callback 来返回 buffer 。

因为 inputbuffer 和 outputbuffer 的个数都是有限的,一旦使用 emptythisbuffer 将所有的 inputbuffer 都填满数据,如果此时 component 不返回,则就不能再有新的数据能进来。对 outputbuffer 同样,如果所有的 outputbuffer 都被 fillthisbuffer 占用,等待填充数据,在 component 返回之前将不再有新的 buffer 能用来填充输出数据。

在 PCMF 没有重新将 buffer 分配给 omx component 之前, component 不能对一个 buffer 进行多次返回。一旦 component 返回 buffer ,在 PCMF 没有使用 emptythisbuffer 或者 fillthisbuffer 将这个 buffer 的所有权分给 component 之前, component 不能对 buffer 进行操作。

[有点小疑问:从上面的原来分析可以看出来,实际上虽然分配了 NumiputBuffer NumoutputBuffer ,但这些 buffer 的所有权并不是 component ,对这个向 "component 发送 buffer “总是无法了解,在分配 buffer 的时候不是根据 port 来进行分配的么,为什么现在所有权不属于 component ,而且好像跟 port 也不是相对应的]

具体过程:

3.6 pausing 和 resuming 是在播放器中经常用到的,从执行状态到暂停,再从暂停回到播放都是通过 OMX_SendCommand 来实现的,过程同前面的状态改变一样 OMX_StateExecuting-----> OMX_StatePause ------> OMX_StateExecuting 。一旦进入停止状态, PVMF 就不再向 component 发送 input/output buffer ,直到收到从 component 发送来的进入执行状态的 callback 。

具体过程:

 

3.7 port flush 主要用在解码器中,比如说播放器复位的时候,这里的也是通过 OMX_SendCommand 来实现的。另外 port flush 也用在 IL client 释放动态 port 的过程中。[也有个小疑问,这里冲刷的究竟是哪个 buffer 里面的内容呢?]

具体过程:

 

3.8 在执行和暂停状态都可以通过发送 stop command 使 component 进入 Idle 状态。一旦进入 Idle 状态, PVMF 就会假定 component 已经返回了所有的 buffer 。

具体过程:

 

3.9 从 Idle 状态进入 Loaded 状态的过程如下:

@首先通过 OMX_SendCommand ,将状态从 OMX_StateIdle 转变成 OMX_StateLoaded 。

@然后调用 OMX_FreeBuffer 释放掉 input/output buffers ,调用次数根据 NumInput/outputBuffers 。

@然后等待 comonent 的 call back

@最后调用 OMX_FreeHandle 使 OMX core 释放掉所有的 comonent 的 handle 。

在进行状态转换之前, PVMF 会等待 component 返回所有的 input/output buffer ,因为是异步调用, EmptyBufferDone/FillBufferDone call back 可能在 omx component 从 executing 到 idle 状态转变的 call back 之后到达。

具体过程:

3.10 最后 PVMF 调用 OMX_Deinit() 来释放 omx core 。

(yili_xie)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201306/16660.html]
本文出处:CSDN博客 作者:yili_xie 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容