Opencore and OMX core/component interaction (二)

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 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据你提供的引用信息,"omx_core.c: No such file or directory"是一个文件或目录不存在的错误。这个错误可能是由于编译环境缺少必要的文件或目录导致的。根据引用中的信息,可能是由于缺少某个名为"/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc"的文件或目录。另外,引用中的信息提到了内存分配的问题,这也可能导致文件或目录无法访问。 为了解决这个问题,你可以尝试以下几个步骤: 1. 确认编译环境是否完整:检查一下你的编译环境是否缺少了某些必要的文件或目录。确保"/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc"文件或目录存在,并且具有正确的权限。 2. 检查内存使用情况:由于引用中提到了内存分配问题,你可以检查一下你的系统内存使用情况。如果系统内存不足,可能会导致无法分配足够的内存给编译过程,从而导致文件或目录无法访问。你可以尝试释放一些不必要的内存,或者增加系统内存容量。 3. 检查依赖库:根据引用中的信息,可能还存在一个缺少"libstdc.so.6"的问题。这可能是由于缺少某个依赖库文件导致的。你可以尝试安装或更新相应的依赖库,以确保编译过程中所需的库文件齐全。 请根据以上步骤逐一检查和解决问题,希望能帮到你。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Ubuntu16.04下搭建开发环境及编译tiny4412 Android系统](https://blog.csdn.net/zdf511391565/article/details/78363285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值