Android CCodec Codec2 (三)C2Param - Ⅰ

news2024/9/28 7:25:25

在Codec2框架中,对组件的配置(Setting)、微调(Tuning)以及组件回传的信息(Info)都是通过参数的形式进行传递的。无论是简单参数(只包含一个值)还是复杂参数(包含多个字段),都是以结构体的形式被定义的。Codec2框架提供了全新的参数反射机制,该机制可以在不修改Framework的情况下,将厂商扩展暴露给上层APP使用。要使用这个机制,需要按照Codec2标准来定义参数。

1、参数类型划分

Codec2将参数划分为两大类:一类是与组件配置相关的参数,另一类是与码流数据相关的参数。其中,与组件配置相关的参数又根据使用时机进一步细分为静态配置参数和动态配置参数。

请添加图片描述

  • Setting:只能在Stopped状态下设定;
  • Tuning:可以在任何状态下设定此类型的参数;
  • Info:与已被处理的数据相关的信息,简单来说就是output携带的信息,该参数也是动态的。

2、参数设计

从整体来看Codec2参数由三部分组成,分别为index、size和data。

  • index:参数索引,是唯一的id,记录有参数的类型
  • size:整个参数结构体的大小;
  • data:参数结构体存储数据的部分。

请添加图片描述

在Codec2中,大部分的参数只有一个字段,它们的结构参考data1。为了实现复杂功能,不可避免地需要传递包含多个字段的参数,结构参考data2。

data3中包含一个灵活数组成员(Flexible Array Member, FAM),灵活数组在结构体中只能放在结构体的最后。包含灵活数组的结构体比较特殊,因为数组元素不确定,size无法计算。

Blob(Binary Large Object)表示二进制大型对象,通常指的是一块可以存储任意类型数据的二进制数据块。Codec2可能用参数结构体传递一些比较大的数据,该功能使用灵活数组实现。

请添加图片描述

在Codec2实现中,参数会被划分为Header和Data两部分。Header包含index和size两部分,data可以是一个字段也可以是一个结构体(包含多个字段),用于存储被传递数据。

3、参数结构体字段类型

理论上参数结构体的字段可以是任意类型的,但是为了反射实现更简单,Codec2框架推荐参数字段使用基本数据类型。可用的原始数据类型如下:

  • uint64_t
  • int64_t
  • c2_cntr64_t
  • uint32_t
  • int32_t
  • c2_cntr32_t
  • float

我们不熟悉的是c2_cntr32_t和c2_cntr64_t,它们是由Codec2框架定义的用于计数的类型,以c2_cntr32_t为例简单看下它们是怎么使用的。

c2_cntr32_t定义在C2.h中,它是一个模板参数是uint32_t的模板类型:

typedef c2_cntr_t<uint32_t> c2_cntr32_t;

template<typename T, typename B=typename std::enable_if<std::is_integral<T>::value && std::is_unsigned<T>::value>::type>
class C2_HIDE c2_cntr_t {
    T mValue;
public:
    inline constexpr c2_cntr_t() : mValue(T(0)) {}

    template<typename U>
    inline constexpr c2_cntr_t(const U &value) : mValue(compat::get(value)) {}

    inline constexpr typename std::make_signed<T>::type peek() const {
        return static_cast<typename std::make_signed<T>::type>(mValue);
    }

    inline constexpr typename std::make_signed<T>::type peek() const {
        return static_cast<typename std::make_signed<T>::type>(mValue);
    }

    inline constexpr T peeku() const {
        return mValue;
    }

    inline constexpr long long peekll() const {
        return (long long)mValue;
    }

    inline constexpr unsigned long long peekull() const {
        return (unsigned long long)mValue;
    }

}

创建c2_cntr32_t和c2_cntr64_t时和普通的数据类型一样,只不过读取数据的时候需要选择合适的方法,用peeku还是peekull。

如果需要传递字符串,可以使用char[],数组长度可以是固定的,也可以是变长的。

4、复杂参数定义

Codec2框架在C2Config.h中预先定义了很多参数,接下来我们用几个例子来看看参数是如何定义的,以便我们能够根据需求自定义新的参数。

5、简单参数定义

请添加图片描述

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

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

相关文章

HEIC批量格式转化JPG怎么转?这四种方法很好用

HEIC批量格式转化JPG怎么转&#xff1f;随着智能手机技术的不断发展&#xff0c;HEIC&#xff08;High Efficiency Image Container&#xff09;作为一种高效的图像压缩格式&#xff0c;逐渐被广泛应用于iOS设备中。然而&#xff0c;由于HEIC格式的兼容性问题&#xff0c;许多非…

Echarts 散点图的 tooltip 自定义formatter方法(展示X、Y、value之外的数据)

1.效果展示&#xff0c;如图&#xff0c;tooltip的构成是指标名实际值【目标值】 2.后端的数据结构 3.完整代码&#xff1a;主要就是将需要展示的字段数据拼好放到tooltipInfo里 initLeftEcharts() {const now new Date();const year now.getFullYear();const month …

oracle共享池(shared pool):一、工作原理、组成部分 二、软硬解析过程

文章目录 oracle整体结构图共享池&#xff08;shared pool&#xff09;shared pool的作用shared pool的组成查询 shared pool 各组成部分大小硬解析和软解析 oracle整体结构图 共享池&#xff08;shared pool&#xff09; shared pool的作用 1、 将 sql 语句解析成执行计划 …

统一服务入口-Gateway(一)

目录 1.网关介绍 1.1含有问题 1.2什么是API网关 网关核心功能&#xff1a; 2.Spring Cloud Gateway 2.1什么是Spring Cloud Gateway 2.2快速上手 2.2.1创建网关项目 2.2.2引入网关依赖 2.2.3添加Gateway的路由配置 2.2.4测试 2.3Predicate 2.3.1Predicate的其他写…

[数据集][目标检测]电力场景红外图像输电线路绝缘子检测数据集VOC+YOLO格式1846张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1846 标注数量(xml文件个数)&#xff1a;1846 标注数量(txt文件个数)&#xff1a;1846 标注…

《大模型应用开发极简入门》-当有了一个大模型,你需要知道的几件事情

从某种意义上来说&#xff0c;大模型&#xff08;LLM-Large language model&#xff09;也是一个任人打扮的小姑娘&#xff0c;你可以对她进行课程教学&#xff08;即微调&#xff09;、可以告诉她一些问题的应对办法&#xff08;即提示工程&#xff09;、还可以带上一部计算器…

(2024,ReLU-Transformer,样条,Veronese 映射,Pierce–Birkhoff 猜想)注意力机制是平滑的三次样条

Attention is a smoothed cubic spline 目录 0. 摘要和简介 0.1. 通过样条理解 Transformer 1. Transformer 的数学描述 1.9. ReLU-Transformer 2. 样条&#xff08;Spline&#xff09; 2.1. 标量值样条 2.2. 向量值样条 2.3. 矩阵值样条 2.4. Pierce–Birkhoff 猜想…

大杂烩!注意力机制+时空特征融合!组合模型集成学习预测!CNN-LSTM-Attention-Adaboost多变量负荷预测

大杂烩&#xff01;注意力机制时空特征融合&#xff01;组合模型集成学习预测&#xff01;CNN-LSTM-Attention-Adaboost多变量负荷预测 目录 大杂烩&#xff01;注意力机制时空特征融合&#xff01;组合模型集成学习预测&#xff01;CNN-LSTM-Attention-Adaboost多变量负荷预测…

AI大模型开发——7.百度千帆大模型调用

本节旨在为读者提供一个实用指南&#xff0c;探讨如何有效地利用百度千帆大模型平台的强大功能。从基础的账号注册和密钥申请入手&#xff0c;逐步引领用户通过案例&#xff0c; 理解并掌握如何调用文本和图像处理的大模型 API&#xff0c; 包括但不限于 NLP、对话生成、文本续…

linux中对.jar文件的配置文件进行修改

linux中对.jar文件的配置文件进行修改 第一步&#xff0c;进入你的.jar的当前文件夹 第二步 &#xff0c;编辑你指定的 .jar 文件 编辑之前请先备份 cp xxx.jar xxx-1.2.jar 输入编辑命令 vim xxx.jar第三步&#xff0c;找到你要编辑的文件 输入命令进入vi模式&#xff08;…

Python(TensorFlow)多模光纤光束算法和GPU并行模拟

&#x1f3af;要点 &#x1f3af;多模光纤包含光学系统线性和非线性部分 | &#x1f3af;单变量线性回归、多变量线性回归、人脸图像年龄预测、音频语音分类和 X 射线图像评估算法 | &#x1f3af;在空间光调制器记录海螺参数矩阵&#xff0c;光束算法多变量预测年龄 | &#…

pytorch训练后pt模型中保存内容详解(yolov8n.pt为例)

在 PyTorch 中&#xff0c;.pt 模型文件通常包含以下几类数据&#xff1a; 模型参数&#xff1a; 存储模型的权重和偏置参数。 优化器状态&#xff1a; 包含优化器的状态信息&#xff0c;以便在恢复训练时能够从中断的地方继续。 训练状态&#xff1a; 一些训练过程中的信息&am…

SpringBoot的自动配置原理探究

目录 什么是SpringBoot的自动配置&#xff08;Auto-Configuration&#xff09; 举例&#xff1a;SpringBoot自动配置&#xff08;Redis的自动配置&#xff09;的实例&#xff1a; 步骤1.&#xff1a;引入Redis启动器pom依赖 步骤2.在application.yml或者&#xff08;proper…

火狐浏览器应用商店不支持下载

前言 之前手机一直用的火狐浏览器&#xff0c;现在换了新的手机&#xff0c;又想下载使用&#xff0c;从官网直接下载现在直接跳载到Google Play才能下载&#xff0c;但是国内又用不了的&#xff0c;这里就记录一下怎么在手机应用商店不支持情况下载。 从FTP服务器下载Beta版…

C++学习笔记----4、用C++进行程序设计(四)---- 复合关系与继承关系之间的细线

在现实世界只是很容易区分对象之间是复合关系还是继承关系。没有人会说桔子有一个水果--而只能是桔子是一种水果。但是&#xff0c;在代码中&#xff0c;有时候就不是那么清晰了。 设想有一个代表关联数组的假想类&#xff0c;将一个键影射到一个值的数据结构。例如&#xff0c…

python画图高斯平滑均值曲线

注:细线是具体值,粗线是高斯平滑处理后的均值曲线 #codinggbk import matplotlib.pyplot as plt import numpy as np from scipy.ndimage import gaussian_filter1d# 生成一些示例数据 np.random.seed(0) timesteps np.linspace(1000, 0, 1000) data 0.4 0.2 * np.random.r…

并查集(路径压缩、按秩合并、按大小合并)

文章目录 并查集简单介绍&#xff1a;初始化&#xff1a;如何查找&#xff1f;如何合并&#xff1f;优化如下&#xff1a;路径压缩&#xff1a;代码&#xff1a; 按秩合并&#xff1a;**代码&#xff1a;** 启发式合并&#xff08;按大小合并&#xff09;&#xff1a;代码: 例题…

E5063A-011 时域分析/测试向导程序

矢量网络分析 E5063A 选件 011 E5063A-011 时域分析/测试向导程序 不容错过&#xff01; 概述 Keysight E5063A ENA 系列 PCB 分析仪是较佳的 PCB 生产测试解决方案&#xff0c;可提供阻抗&#xff08;TDR&#xff09;和回波损耗&#xff08;S 参数&#xff09;测量能力。…

11091 最优自然数分解问题(优先做)

### 简短思路 #### 问题&#xff08;1&#xff09;&#xff1a;将n分解为若干个互不相同的自然数之和&#xff0c;且使这些自然数的乘积最大 1. 对于n < 4的情况&#xff0c;直接返回特定值。 2. 对于n > 4的情况&#xff0c;使用贪心策略&#xff0c;将n分解为从2开始的…

证书学习(一)keytool 工具使用介绍

目录 一、keytool 简介1.1 什么是 keytool&#xff1f;1.2 主要功能&#xff1a;1.3 使用场景1.4 常用命令1.5 默认参数 二、keytool 用法说明2.1 基本使用2.2 创建密钥库和密钥条目2.3 查看密钥库信息2.4 导出密钥库条目证书2.5 导入信任证书到密钥库2.6 打印证书内容2.7 删除…