Android CCodec Codec2 (十九)C2LinearBlock

在上一篇文章的结尾,我们看到fetchLinearBlock方法最终创建了一个C2LinearBlock对象。这一节,我们将深入了解C2LinearBlock是什么,它的作用是什么,以及它是如何被创建的。

1、_C2BlockFactory

先对上一篇文章的结尾内容做简单回顾:

  1. BufferPoolClient持有clone的native_handle_t以及bufferId;
  2. BufferPoolClient将bufferId和ConnectionId封装为BufferPoolData,将它与native_handle_t一并返回给调用者;
  3. C2PooledBlockPool拿到返回之后,先用native_handle_t创建出一个C2LinearAllocation,然后将BufferPoolData封装为_C2BlockPoolData;
  4. C2PooledBlockPool调用_C2BlockFactory的CreateLinearBlock方法,将C2LinearAllocation和_C2BlockPoolData作为参数创建出C2LinearBlock。

为什么要大费周章再封装一层C2LinearBlock呢?拿到C2LinearAllocation后我们可以调用它的map方法拿到虚拟内存,从而实现buffer读写。但是框架设计者可能是希望对buffer提供读写控制,比如应用层可以拿到input buffer的读写权限,而在组件只能拿到input buffer的读权限。接下来就先来看C2LinearBlock是如何创建的。

_C2BlockFactory是一个内部的工厂类,提供了一组静态方法,部分方法有多个重载:

这一章只看CreateLinearBlock方法:

cpp 复制代码
std::shared_ptr<C2LinearBlock> _C2BlockFactory::CreateLinearBlock(
        const std::shared_ptr<C2LinearAllocation> &alloc,
        const std::shared_ptr<_C2BlockPoolData> &data, size_t offset, size_t size) {
    std::shared_ptr<C2Block1D::Impl> impl =
        std::make_shared<C2Block1D::Impl>(alloc, data, offset, size);
    return std::shared_ptr<C2LinearBlock>(new C2LinearBlock(impl, *impl));
}

方法内部先使用C2LinearAllocation、_C2BlockPoolData、offset和capacity创建了一个C2Block1D::Impl对象,然后再创建了一个C2LinearBlock对象。

先来看C2Block1D相关的类图:

2、C2Acquirable

3、C2WriteView

4、C2ReadView

5、小结


原文阅读:
Android Codec2(十九)C2LinearBlock

相关推荐
美狐美颜sdk18 分钟前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
揽秀亭长1 小时前
从音频到五线谱|扒谱过程中的关键技术环节
人工智能·音视频
用户69371750013843 小时前
2026,程序员的时代拐点到了
android·前端·后端
浪潮IT馆5 小时前
Android Studio 非最新版本下载安装教程
android·ide·android studio
乐橙开放平台5 小时前
智慧连锁客流检测和离岗检测怎么对接
大数据·人工智能·笔记·物联网·自动化·音视频·智能家居
xiaozongt19896 小时前
MasterGo + Claude Code 生成 Android 布局:完整实践指南
android
Anhty7 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
企业数字化笔记8 小时前
AI工具参数很多怎么办?预设、表单校验、危险参数与配置审计
java·spring boot·python·音视频
VidDown9 小时前
上传 2GB 文件别让 Django 接:分片上传、对象存储直传与秒传
python·django·音视频·状态模式·实时音视频·视频编解码·视频
2501_915909069 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview