Android CCodec Codec2 (二五)OutputBuffers

在这一篇文章中,我们将一起探讨CCodec的输出端口管理类OutputBuffers。与之前学习的InputBuffers截然不同,OutputBuffers并不涉及buffer的分配工作,所以它有一套新的buffer管理方法,另外OutputBuffers还提供了reorder(重排序)功能。

1、OutputBuffers

OutputBuffers继承于CCodecBuffers并在其基础上做了新的抽象,OutputBuffers大致可以分为两部分,一部分是buffer状态管理方法,另一部分是reorder相关的方法。

buffer状态管理方法有如下几个:

  • registerBuffer:注册来自于组件的输出C2Buffer,获取相关的索引和MediaCodecBuffer对象
  • registerCsd:将csd数据作为一个持久的buffer注册;
  • releaseBuffer:释放来自于registerBuffer的buffer,获取与之相关联的C2Buffer;
  • flush:刷新内部状态,此方法调用后,通过registerBuffer注册的buffer或索引都不可再被使用;
  • toArrayMode:返回数组模式;

reorder相关的方法如下:

  • getReorderDepth:获取reorder的深度;
  • setReorderDepth:设置reorder的深度;
  • setReorderKey:设置reorder使用的key(依据);
  • hasPending:判断当前stash(存储区)是否还有buffer;
  • clearStash:刷新stash,重置reorder深度和reorder key;
  • flushStash:刷新stash;
  • pushToStash:将buffer送入reorder stash;
  • popFromStashAndRegister:尝试获取reorder stash中的第一个buffer,并且将它注册到output slots,该函数返回一个值,用于指示调用者的下一步操作;

OutputBuffers的构造函数如下,从这里我们可以知道它的默认debug名称为Output

OutputBuffers(const char *componentName, const char *name = "Output");

放上一张OutputBuffers的UML类图:

2、Reorder

我们在《Android Codec2(十三)CCodecBufferChannel - Ⅰ》一文中已经对reorder有所了解,在OMX中reorder必须由厂商实现,而在Codec2中google多给了一种选择,reorder可以由框架实现。

reorder是OutputBuffers提供的基础功能,无论是audio还是video,普通模式还是数组模式都可以使用此功能,所以reorder是由基类OutputBuffers实现。

OutputBuffers为了实现reorder功能使用了一个叫Output Stash的东西,我们可以将它理解为临时存储区(和git stash类似的东西)。OutputBuffers中有一段对Output Stash的描述:

3、FlexOutputBuffers

4、OutputBuffersArray


原文阅读:
Android Codec2(二五)OutputBuffers

扫描下方二维码,关注公众号《青山渺渺》阅读音视频开发内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山渺渺

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值