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方法:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure PR 9 多级下拉选择器 设计交互

​ 大家好&#xff0c;我是大明同学。 Axure选择器是一种在交互设计中常用的组件&#xff0c;这期内容&#xff0c;我们来探讨Axure中多级下拉选择器设计与交互技巧。 下拉列表选择输入框元件 创建选择输入框所需的元件 1.在元件库中拖出一个矩形元件。 2.选中矩形元件&…

SparkSql读取数据的方式

一、读取普通文件 方式一&#xff1a;给定读取数据源的类型和地址 spark.read.format("json").load(path) spark.read.format("csv").load(path) spark.read.format("parquet").load(path) 方式二&#xff1a;直接调用对应数据源类型的方法 …

使用特征构建进行连续变量的特征提取

特征构建(Feature Engineering)是机器学习过程中至关重要的一步,它直接影响模型的性能和准确性。通过对原始数据进行转换、处理和扩展,可以为模型提供更加丰富的信息,提升预测效果。特征构建的核心思想是利用现有的数据来生成新的特征,以便模型可以更好地捕捉潜在的规律和…

使用Python实现图像的手绘风格效果

使用Python实现图像的手绘风格效果 一、引言二、代码详细解释与示例三、完整框架流程四、运行五、结论附&#xff1a;完整代码 一、引言 在数字图像处理领域&#xff0c;模拟手绘风格是一项有趣且具有挑战性的任务。手绘风格图像通常具有独特的纹理和深浅变化&#xff0c;给人…

Oracle Select语句

SELECT语句使用方法 在Oracle中&#xff0c;表是由列和行组成。 例如&#xff0c;示例数据库中的customers表具有以下列&#xff1a;customer_id&#xff0c;name&#xff0c;address&#xff0c;website和credit_limit。customers表中这些列中也有对应的数据。 要从表的一个或…

Scala的集合。

定义&#xff1a;set表示没有重复元素的集合 特点&#xff1a;唯一&#xff0c;无序 Set有可变mutable和不可变immutable 两种类型。不可变set创建后元素不能修改&#xff0c;可变set可对元素进行添加&#xff0c;删除等操作&#xff0c;这两种类型能满足不同场景需求。 pack…

w~大模型~合集21

我自己的原文哦~ https://blog.51cto.com/whaosoft/12459590 #大模型~微调~用带反馈的自训练 面对当前微调大模型主要依赖人类生成数据的普遍做法&#xff0c;谷歌 DeepMind 探索出了一种减少这种依赖的更高效方法。大模型微调非得依赖人类数据吗&#xff1f;用带反馈的自训…

opencv 中 threshold 函数作用

在 OpenCV 中&#xff0c;threshold 函数用于将图像转换为二值图像&#xff0c;它通过设置一个阈值来将像素值分类为两类&#xff1a;低于阈值的像素设置为 0&#xff08;或黑色&#xff09;&#xff0c;高于阈值的像素设置为最大值&#xff08;通常是 255 或白色&#xff09;。…

ctfshow(316,317,318)--XSS漏洞--反射性XSS

反射型XSS相关知识 Web316 进入界面&#xff1a; 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题&#xff0c;看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台&#xff0c;…

java 容器的快速失败(fast-fail)机制

Java容器的快速失败&#xff08;fail-fast&#xff09;机制是Java集合框架中的一种重要特性&#xff0c;它主要用于在迭代过程中检测并处理集合的并发修改。以下是对该机制的详细解释&#xff1a; 一、定义与原理 快速失败机制的核心思想是在迭代过程中&#xff0c;一旦检测到…

【案例】Excel使用宏来批量插入图片

一、场景介绍 我有一个excel文件&#xff0c;需要通过一列的文件名称&#xff0c;按照规则给批量上传图片附件。 原始文件&#xff1a; 成功后文件&#xff1a; 二、实现方法 1. 使用【wps】工具打开Excel文件&#xff0c;将其保存为启用宏的文件。 2.找到编辑宏的【VB编辑器…

ENSP OSPF和BGP引入

路由协议分为&#xff1a;内部网关协议和外部网关协议。内部网关协议用于自治系统内部的路由&#xff0c;包括&#xff1a;RIP和OSPF。外部网关协议用于自治系统之间的路由&#xff0c;包括BGP。内部网关协议和外部网关协议配合来共同完成网络的路由。 BGP:边界网关路由协议(b…

Linux磁盘存储

磁盘存储 设备文件 设备文件是类Unix操作系统&#xff08;包括Linux&#xff09;中一种特殊的文件类型&#xff0c;它代表了设备接口&#xff0c;使得用户空间的程序可以通过标准的文件操作来访问和控制硬件设备。设备文件为周边设备提供了简单的接口&#xff0c;如打印机、硬…

xcode更新完最新版本无法运行调试

‌Xcode更新后无法运行调试的原因可能包括以下几个方面‌&#xff1a; 1.‌版本兼容性问题‌&#xff1a;Xcode更新后&#xff0c;某些旧版本的代码可能不再兼容新版本的Xcode&#xff0c;导致出现错误。解决方法是根据错误提示逐个修复代码&#xff0c;或者尝试使用兼容新版本…

Windows下Python环境安装GDAL

最近发现在Windows环境下安装gdal,rasterio等都会出现头文件缺失的问题,比如: pip install gdal -i https://pypi.tuna.tsinghua.edu.cn/simple pip install rasterio -i https://pypi.tuna.tsinghua.edu.cn/simple 安装会下载tar.gz格式的gdal包,回报一些类似找不到头文件…

vscode生成项目目录结构

在博客中经常看到目录结构如下&#xff1a; project-tree ├─ .git ├─ .gitignore ├─ .vscodeignore ├─ images ├─ node_modules ├─ src │ ├─ config.ts │ ├─ index.ts │ └─ utils.ts ├─ tsconfig.json ├─ tslint.json └─ webpack.config.js 应该如何…

阿里云ECS服务器使用限制及不允许做的事情

阿里云ECS&#xff08;Elastic Compute Service&#xff09;是一种高性能的弹性计算服务&#xff0c;允许用户在云端创建和管理虚拟服务器。尽管ECS提供了强大的功能&#xff0c;但在使用过程中&#xff0c;阿里云有一些限制和不允许的行为。以下是一些主要的使用限制和禁止行为…

el-date-picker 设置开始时间和结束时间

<el-date-picker v-model"ruleForm.RECORDDATE" type"date" placeholder"日期" format"YYYY/M/D" value-format"YYYY/M/D" style"width: 100%;" :disabled-date"publishDateAfter" > </el-dat…

【LeetCode】【算法】240. 搜索二维矩阵II

LeetCode 240. 搜索二维矩阵II 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 思路 思路&#xff1a;K神真强啊240.搜索二维矩阵II&#xff0…

【手撕排序4】计数排序+快速排序(非递归)

> &#x1f343; 本系列包括常见的各种排序算法&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:[小编的个人主页])小编的个人主页 > &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 > ✌️ &#x1f91e;…