Android CCodec Codec2 (十九)C2LinearBlock

ops/2024/11/8 23:42:05/

在上一篇文章的结尾,我们看到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.ppmy.cn/ops/132064.html

相关文章

RHCE---搭建lnmp云存储

一、恢复快照后&#xff0c;检查安全性&#xff08;查看selinux 以及防火墙&#xff09; 二、搭建LNMP环境 [rootserver ~]# yum -y install nginx mariadb-server php*三、上传软件 1、将nextcloud-25.0.1.zip压缩包传递到根目录下 2、解压缩nextcloud-25.0.1.zip &#xf…

C#语言:从入门到精通

C#&#xff08;发音为C sharp&#xff09;是一种现代的、面向对象的编程语言&#xff0c;由微软开发&#xff0c;并作为.NET框架的一部分。自2000年发布以来&#xff0c;C#已经成为开发人员构建各种类型的应用程序的首选语言之一。它结合了C的性能和Java的跨平台能力&#xff0…

jenkins使用slave节点进行node打包报错问题处理

jenkins使用slave打包报错 Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to 21.136 解决方法&#xff1a; 重启从节点 选择断开连接再重新连

蓝桥杯真题——三角回文数(C语言)

问题描述 对于正整数 n, 如果存在正整数 k 使得 n123⋯kk(k1)2n123⋯kk(k1)/2​, 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123⋯36366066123⋯363 。 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数…

Flutter启动流程(2)

Flutter启动流程 简述 我们还是从Flutter在Android上启动流程来学习Flutter&#xff0c;只要学习了启动流程&#xff0c;就会对Flutter的实现有一些理解&#xff0c;否则像Flutter&#xff0c;RN这些对于原生应用开发者就像是一个黑盒子。 Flutter 在Android上必然还是要依赖…

动力商城-02 环境搭建

1.父工程必须满足&#xff1a;1.1删除src目录 1.2pom 2.依赖继承 //里面的依赖&#xff0c;后代无条件继承<dependencies></dependencies>//里面的依赖&#xff0c;后代想要继承&#xff0c;得自己声明需要使用&#xff0c;可以不写版本号&#xff0c;自动继承&l…

1. pytorch 中冻结模型参数后参数仍会被调整

问题 self.sgf_net.requires_grad_(False)起初设置 requires_grad(False) 优化器也没有添加sgfnet的模型参数。但是在pylightning框架中&#xff0c;每次推理完模型的参数都会被改变&#xff0c;经过仔细排查发现问题 # self.sgf_net.requires_grad_(False)for param in self.s…

HTML 块级元素和内联(行内)元素详解

在 HTML 中,元素根据它们在页面中的表现方式分为两类:块级元素 和 内联元素(行内元素)。了解块级元素和内联元素的特性与使用方法,是掌握HTML开发的重要基础。本文将深入探讨这两类元素的特点及其在实际开发中的应用。 文章目录 一、块级元素1.1 块级元素是什么?1.2 块级…