码迷,mamicode.com
首页 > 其他好文 > 详细

OpenMax 初始化和数据流调用时序

时间:2014-06-08 18:17:59      阅读:775      评论:0      收藏:0      [点我收藏+]

标签:openmax   初始化   数据流程   

1.初始化

本节描述OpenMax组件初始化的时序。组件可以直接被IL client操作,或者组件之间建立隧道化,或者两者皆可。

1.1 非隧道化初始化

bubuko.com,布布扣

首先,IL client通过调用OMX_GetHandle函数触使OpenMax core创建一个真正的组件实体,与此同时组件的配置信息也被加载到内存中。core把IL client的callback函数通过 SetCallbacks函数设置给组件。如果这些步骤都成功了,那么会返回一个组件句柄给IL client,同时组件进入OMX_StateLoaded状态。


IL client可以调用一次或者多次OMX_SetParameter 函数来配置组件和它的端口。

配置完成后,IL client请求组件进入 OMX_StateIdle状态。只有进行这一步之后,IL client才能为组件设置它的端口所需要的内存。IL client可以调用OMX_AllocateBuffer 或者OMX_UseBuffer来设置内存。设置内存的步骤可能会进行多次,取决于端口的数目和每一个端口所需的内存总数。

当完成这些之后,组件会发送一个事件给IL client,作为 SendCommand 请求完成的应答。

1.2 隧道化初始化

为了避免在IL client和组件之间来回的移动数据buffer,可以在组件链上建立隧道化,这样一个组件的输出buffer可以直接传递到下一个组件的输入端口。考虑下图的情况,IL client为三个隧道化的组件,A,B,C,生产数据。组件C是一个sink组件不会返回数据给IL client。

bubuko.com,布布扣

组件之间隧道化的建立依照以下步骤:

1.通过OMX_GetHandle函数构建组件

2.建立隧道化,将第一个组件的输出端口和第二个组件的输入端口连接。这个步骤中要确定是哪一个端口提供buffer

3.OMX_SetupTunnel 函数完成后IL client也可以通过设置buffer提供者到输入端口,改变输入端口 buffer提供者的选择。

当从OMX_StateLoaded 转变 为 OMX_StateIdle,直到所有启用的端口的内存都得到分配,状态转换才会完成。只有当组件处于OMX_StateLoaded
状态或者端口禁用,才能调用OMX_SetupTunnel函数。

bubuko.com,布布扣

OMX_TUNNELSETUPTYPE 结构体用于ComponentTunnelRequest的输出端口传递数据到输入端口。

下图说明IL client如何改变输入端口的buffer提供者:

bubuko.com,布布扣

隧道化初始化的最后一个步骤就是组件状态从OMX_StateLoaded 转变为OMX_StateIdle。

bubuko.com,布布扣

组件A和组件B隧道化,组件B是buffer提供者。组件B和组件C隧道化,组件C是buffer提供者。

下图说明了在组件状态转换期间的时序:

bubuko.com,布布扣

组件的buffer提供端口都必须通过 OMX_UseBuffer将它的buffer传递到与之隧道化的非buffer提供者端口。

2.数据流

OpenMax定义了两种数据交流的方式:

1.隧道化,一个端口直接和另一个组件的端口交换数据

2.非隧道化,端口直接和IL client交换数据

2.1 非隧道化数据流

IL client通过OMX_EmptyThisBuffer函数调用将一块数据buffer分发给组件的输入端口。反之,IL client应该为输出端口提供一个或者多个空的buffer,一遍组件可以写入输出数据。通过调用OMX_FillThisBuffer函数来完成这一任务。一旦组件的输出端口上有有效的buffer,它就会调用OMX_FillBufferDone函数。

bubuko.com,布布扣

1.2 隧道化数据流

bubuko.com,布布扣



OpenMax 初始化和数据流调用时序,布布扣,bubuko.com

OpenMax 初始化和数据流调用时序

标签:openmax   初始化   数据流程   

原文地址:http://blog.csdn.net/ifloveelse/article/details/28852949

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!