Android CCodec Codec2 (十一)CCodec

CCodec继承于CodecBase,向下封装了Codec2Client,向上提供接口给MediaCodec调用。CCodec包含CCodecBufferChannel和CCodecConfig两大子模块,相较ACodec而言,CCodec的职责划分与消息处理逻辑做了很大改动。本节将简单剖析CCodec中的部分设计思路,为后续的数据处理流程分析做准备。

1、职责划分

CCodec的构造函数实例化了两个成员,分别为CCodecBufferChannel和CCodecConfig:

CCodec::CCodec()
    : mChannel(new CCodecBufferChannel(std::make_shared<CCodecCallbackImpl>(this))),
      mConfig(new CCodecConfig) {
}

在ACodec中,组件的参数配置、状态设定以及buffer处理流程均在ACodec的消息处理线程中完成,而ACodecBufferChannel则主要负责向上层提供buffer操作的接口,不承担其他额外功能。这样做导致ACodec的代码变得很长,优点是消息处理井然有序,代码逻辑比较简单,缺点是所有的消息都在一个线程中处理,效率较低。

框架写作者对CCodec做了全新的职责划分:

  • buffer相关的操作全部转由CCodecBufferChannel来处理;
  • 所有的参数、组件配置全都存储在CCodecConfig中;
  • CCodec主要承担上层调用与组件Callback消息的处理,根据不同的消息调用CCodecBufferChannel或CCodecConfig做处理;

2、消息处理逻辑

在Android Media Framework(十三)ACodec - Ⅰ一文中我们讲到,ACodec消息处理线程需要处理三类消息,分别为组件控制消息、buffer处理消息以及组件Callback消息。

CCodec的消息处理线程只需要处理组件控制消息和组件Buffer Callback消息:

3、Mutexed

4、State


原文阅读:
Android Codec2(十一)CCodec

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

青山渺渺

感谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值