gst-openmax和openmax component的理解

两个队列(queue)

  • in_port queue
  • out_port queue

in_port queue

存放空的omx_buffer, 在GstBuffer过来之后,从in_port队列里面pop一个空的omx_buffer出来,将GstBuffer转换成omx_buffer, 通过EmptyThisBuffer发给OpenMax Component,然后通过回调函数EmptybufferDone把空的 omx_buffer 放回到 in_port 队列里面。

EmptyThisBuffer发送一个填满未解码数据的buffer给omx component,omx component会通过EmptyBufferDone回调函数把空的omx_buffer放回到in_port队列里面。

EmptyThisBuffer是in_port上将数据buffer往下发

out_port queue

存放编解码后的omx_buffer,从out_port队列里面pop出来之后,转换成GstBuffer,然后会push到gst-openmax的srcpad上。

通过OMX_FillThisBuffer, 从OpenMax Component获得空的omx_buffer,FillBufferDone
类似于EmptyBufferDone,会把填了编解码数据的的omx_buffer push到out_port的队列里面。

OMX_FillThisBuffer发送一个空的buffer给openmax component,openmax component将填满编解码好的数据buffer,然后通过FillBufferDone返回给gst-openmax。

OMX_FillThisBufferout_port上去component拿buffer, 然后转换成GstBuffer。

gst-openmax的两个函数

  • g_omx_port_send
  • g_omx_port_recv

g_omx_port_send

- requst_buffer
- send buffer
- release_buffer
  • in_port 进行empty,通过emptyBufferDone返回给in_port queue
  • in_port维护一个空的buffer queue

g_omx_port_recv

- request_buffer
- convert to gst_buffer
- return buffer
  • out_port 进行Fill,通过FillBufferDone放回到out_port queue
  • out_port维护一个的buffer queue,需要转换成gst buffer发出去

简单点理解

  • EmptyThisBuffer 送去解码,EmptyBufferDone返回空buffer

  • OMX_FillThisBuffer取解码数据,FillBufferDone返回解码数据

做项目的时候理解

FTB就是app取数据,把output空buffer送给codec, FBD就是codec把编解码后的数据填好送给app,ETB就是app把input数据送给codec, EBD就是codec把inputbuffer取走了,把input端的空buffer还给app。

output端

FillThisBuffer

  • 把output 端的空buffer给codec,codec需要往里面放编解码的数据

FillBufferDone

  • 是codec把编解码完的数据送出来

input端

EmptyThisBuffer

  • 把input数据送给codec,就是给codec数据进行编解码

EmptyBufferDone

  • 就是codec把input buffer取走了,把empty的input还给app

所以empty是input端,fill是output端

再换个角度理解

  1. openMax IL传递buffer给openMax components:
  • 送buffer给components解码 :OMX_EmptyThisBuffer
  • 从components取回解码后的buffer:OMX_FillThisBuffer
  1. openMax components通过callback返回buffer给openMax IL:
  • components消化了送给它做解码的buffer :EmptyBufferDone
  • components完成了解码后把解码数据放到buffer中 :FillBufferDone

IL Client pass the buffers to components

  • OMX_EmptyThisBuffer, OMX_FillThisBuffer

Component returns the buffers to IL Client via callbacks

  • EmptyBufferDone, FillBufferDone
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值