AV1 Bitstream Decoding Process Specification--[3]:约定

news2024/11/16 13:56:00
  • 原文地址:https://aomediacodec.github.io/av1-spec/av1-spec.pdf
  • 没有梯子的下载地址:AV1 Bitstream & Decoding Process Specification
  • 摘要:这份文档定义了开放媒体联盟(Alliance for Open Media)AV1视频编解码器的比特流格式和解码过程。
  • 规范:此文档规定了开放媒体联盟(Alliance for Open Media)AV1比特流格式和解码过程。

约定

通用

  • 数学运算符及其优先级规则与C编程语言中使用的类似。特别地,定义了截断整数除法的操作。
  • 用于保存运动矢量的两个元素数组(变量名以"Mv"或"Mvs"结尾)可以使用数组表示法(例如 Mv[0] 和 Mv[1])或仅使用变量名(例如 Mv)进行访问。仅使用变量名时,只定义了赋值和等式/不等式测试操作。数组赋值使用 A = B 表示,意味着与单独赋值 A[0] = B[0] 和 A[1] = B[1] 相同。两个运动矢量的等式测试使用 A == B 表示,意味着与 (A[0] == B[0] && A[1] == B[1]) 相同。不等式测试定义为 A != B,意味着与 (A[0] != B[0] || A[1] != B[1]) 相同。
  • 当一个变量被说成可以用x位有符号整数表示时,意味着该变量大于或等于 -(1 << (x-1)),且小于或等于 (1 << (x-1)) - 1。
  • 本文档中的关键词“must”, “must not”, “required”, “shall”, “shall not”, “should”, “should not”, “recommended”, “may”, 和 “optional”应按照RFC 2119中的描述进行解释。

算术运算符

+加法
-减法(作为二元运算符)或否定(作为一元前缀运算符)
*乘法
/整数除法,结果向零截断。例如,7/4 和 -7/-4 都截断为 1,而 -7/4 和 7/-4 都截断为 -1。
a%ba 除以 b 的余数。a 和 b 都是正整数。
÷浮点数(算术)除法。
ceil(x)大于或等于 x 的最小整数。
floor(x)小于或等于 x 的最大整数。

逻辑运算符

a&&b逻辑与操作,用于判断 a 和 b 是否都为真。
a||b逻辑或操作,用于判断 a 和 b 是否至少有一个为真。
!逻辑非操作

位运算符

&按位与操作。对两个数的二进制表示进行逐位与运算。
按位或操作。对两个数的二进制表示进行逐位或运算。
^按位异或操作。对两个数的二进制表示进行逐位异或运算。
~按位取反操作。对数的二进制表示进行逐位取反。
a>>b右移位操作。将 a 的二进制补码表示形式向右移动 b 个比特位置。这个运算符仅用于 b 为非负整数的情况。向右移动时,原来最左边的位被移到最右边,左侧空出的位用符号位(即最左边的位)填充。
a<<b左移位操作。将 a 的二进制补码表示形式向左移动 b 个比特位置。这个运算符仅用于 b 为非负整数的情况。向左移动时,原来最右边的位被移到最左边,右侧空出的位用0填充。

赋值

=赋值运算符。将右侧表达式的值赋给左侧的变量。
++自增运算符。x++ 相当于 x = x + 1。当这个运算符用于数组索引时,变量值在自增操作之前被获取。
自减运算符。x-- 相当于 x = x - 1。当这个运算符用于数组索引时,变量值在自减操作之前被获取。
+=加法赋值运算符。例如,x += 3 对应于 x = x + 3。
-=减法赋值运算符。例如,x -= 3 对应于 x = x - 3。

数学函数

  1. 这些数学函数 (Abs, Clip3, Clip1, Min, Max, Round2 and Round2Signed) 定义如下:
    在这里插入图片描述
  2. Round2 函数的标准定义使用了数学中的幂和除法操作。这里提供了一个使用整数操作的等效定义:
Round2(x, n) {
    if (n == 0)
        return x;
    return (x + (1 << (n - 1))) >> n;
}

这个函数对数值 x 进行舍入,n 指定了要舍入到的小数位的位数。如果 n 为 0,则直接返回 x。否则,通过加上 2 的 (n-1) 次方,然后向右位移 n 位来实现舍入。

  1. FloorLog2(x) 函数定义为输入 x 的以 2 为底的对数的向下取整值。输入 x 总是一个整数,并且总是大于或等于 1。这个函数用于找出 x 的最显著位(即最高位的 1)的位置:
FloorLog2(x) {
    s = 0;
    while (x != 0) {
        x = x >> 1;
        s++;
    }
    return s - 1;
}

这个函数通过不断地将 x 右移直到 x 为 0,来计算 x 的二进制表示中最高位 1 的位置。

  1. CeilLog2(x) 函数定义为输入 x 的以 2 为底的对数的向上取整值。当 x 为 0 时,函数定义为返回 0。输入 x 总是一个整数,并且总是大于或等于 0。这个函数用于计算表示范围从 0 到 x-1 的值所需的位数:
CeilLog2(x) {
    if (x < 2)
        return 0;
    i = 1;
    p = 2;
    while (p < x) {
        i++;
        p = p << 1;
    }
    return i;
}

这个函数通过不断地将 2 的幂次方翻倍,直到这个值大于或等于 x,来计算所需的位数。

描述比特流语法的方法

  1. 比特流中语法元素的描述风格类似于C编程语言。语法元素在比特流中用粗体表示。每个语法元素都通过其名称(只使用小写字母和下划线字符)和其编码表示方法的描述符来描述。解码过程根据语法元素的值以及之前已解码的语法元素的值来执行。当语法元素的值在语法表或文本中使用时,它以常规类型(即非粗体)显示。如果语法元素的值正在被计算(例如,用默认值而不是在比特流中编码来写入),它也以常规类型显示(例如,tile_size_minus_1)。
  2. 在某些情况下,语法表可能使用其他从语法元素值派生的变量的值。这些变量在语法表或文本中出现,由小写字母和大写字母混合命名且不包含任何下划线字符。以大写字母开头的变量是为了解码当前语法结构和所有依赖的语法结构而派生的。这些变量可用于后续语法结构的解码过程。以小写字母开头的变量仅在它们派生的过程中使用。(允许使用单字符变量。)
  3. 常量值以全部大写字母和下划线字符显示(例如,MI_SIZE)。 常量查找表以单词形式出现(每个单词的首字母大写,其余字母小写),用下划线分隔(例如,Block_Width[…])。 十六进制表示法,通过在十六进制数前加上0x来表示,当位数是4的倍数时可能使用。例如,0x1a表示比特串0001 1010。 二进制表示法通过在二进制数前加上0b来表示。例如,0b00011010表示比特串0001 1010。二进制数可能包含下划线字符以提高可读性。如果存在,下划线字符从最低位(LSB)开始每4个二进制数字出现一次。例如,0b11010也可以写作0b1_1010。值等于0代表测试语句中的FALSE条件。任何非0值代表TRUE。
  4. 以下表格列出了语法规范格式的例子。当语法元素以粗体出现时(例如syntax_element),它指定这个语法元素是从比特流中解析出来的。
    在这里插入图片描述
    在这里插入图片描述

函数

  1. 用于语法描述的比特流函数在本节中指定。其他函数包含在语法表中。如果一个部分直接或间接通过子进程导致从比特流中读取语法元素,则该部分被称为语法。其余部分被称为函数。
  2. 这些函数的规范使用了比特流位置指示器。这个比特流位置指示器定位了下一个要读取的比特的位置。
    • get_position():返回比特流位置指示器的值。
    • init_symbol(sz):根据第8.2.2节的规定,用sz字节的大小初始化符号解码器的算术解码过程。
    • exit_symbol():按照第8.2.4节的描述退出算术解码过程(这包括读取尾随比特)。

描述符

  1. 常规:以下描述符指定了语法元素的解析方式。小写描述符指定了在比特流中由整数位数表示的语法元素;大写描述符指定了由算术编码表示的语法元素。
  2. f(n):在比特流中直接出现的无符号 n 位数字。比特按从高到低的顺序读取。调用第8.1节指定的解析过程,并将语法元素设置为返回值。
  3. uvlc(n):在比特流中直接出现的变长无符号 n 位数字。对于这个描述符的解析过程如下:
    在这里插入图片描述
  4. le(n):在比特流中直接出现的无符号小端模式的 n 字节数字。对于这个描述符的解析过程如下:
    在这里插入图片描述
  5. leb128():无符号整数,由变长的小端字节表示。
    • 注意:这个语法元素仅在比特流位置对齐到字节时才会出现。
    • 在这种编码中,每个字节的最高位(最左边的位)如果等于1,则表示需要继续读取更多字节;如果等于0,则表示编码结束。
    • 在这个过程中间读取的字节数将被设置为一个变量 Leb128Bytes。这个描述符的解析过程如下:
      在这里插入图片描述
    • 比特流一致性的要求是,leb128解析过程返回的值必须小于或等于 (1 << 32) - 1。
    • leb128_byte包含从比特流中读取的8位。最低的7位被用来计算变量的值。最高有效位用来指示是否还有更多的字节需要读取。
    • 比特流一致性的要求是,如果i等于7,则leb128_byte的最高有效位必须等于0。(这确保了这种语法描述符永远不会使用超过8个字节。)
    • 注意:根据编码的前导零比特的数量,同一值有多种编码方式。没有要求说这个语法描述符必须使用最压缩的表示形式。这对编码器的实现很有用,因为它允许在数值最终确定后,稍后填充固定数量的空间。
  6. su(n):从比特流中的n位无符号整数转换而来的有符号整数。(无符号整数对应于有符号整数的最低n位。)这个描述符的解析过程如下:
    在这里插入图片描述
  7. ns(n):无符号编码整数,最大数值数量为 n(即输出范围在 0 到 n-1 之间)。
    • 这个描述符类似于 f(CeilLog2(n)),但通过对于值范围的较低部分编码时减少1个比特,减少了在编码非2的幂次方值范围时产生的浪费。例如,当 n 等于 5 时,编码如下(同时也呈现了完整的二进制编码以供比较):
      在这里插入图片描述
    • 这个描述符的解析过程指定如下:
      在这里插入图片描述
      "ns"这个缩写代表非对称(non-symmetric)。这种编码是非对称的,因为不是所有值都使用相同数量的比特进行编码。
  8. L(n):无符号算术编码的 n 位数字被编码为 n 个标志(一个“字面量”)。这些标志是从高阶到低阶顺序读取的。语法元素被设置为 read_literal(n) 的返回值(见第 8.2.5 节以了解这个过程的规范)。
  9. S():一个算术编码的符号,编码自最多包含16个条目的小字母表。该符号是根据上下文敏感的累积分布函数(CDF)进行解码的(见第8.3节以了解这个过程的规范)。
  10. NS(n):无符号算术编码整数,最大值数量为 n(即输出范围在 0 到 n-1 之间)。这个描述符与 ns(n) 相同,只是底层的比特是算术编码的。
    • 这个描述符的解析过程规定如下:
      在这里插入图片描述

原文

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

DebateGPT:通过多智能体辩论监督微调大模型

人工智能咨询培训老师叶梓 转载标明出处 这些模型的训练通常依赖于资源密集型的人工反馈&#xff0c;这不仅成本高昂&#xff0c;而且耗时。为了解决这一问题&#xff0c;一篇名为《FINE-TUNING LARGE LANGUAGE MODELS WITH MULTI-AGENT DEBATE SUPERVISION》的论文提出了一种…

Sybase「退役」在即,某公共卫生机构如何实现 SAP Sybase 到 PostgreSQL 的持续、无缝数据迁移?

使用 TapData&#xff0c;化繁为简&#xff0c;摆脱手动搭建、维护数据管道的诸多烦扰&#xff0c;轻量替代 OGG, Kettle 等同步工具&#xff0c;以及基于 Kafka 的 ETL 解决方案&#xff0c;「CDC 流处理 数据集成」组合拳&#xff0c;加速仓内数据流转&#xff0c;帮助企业…

表单标记form

1.form:表单域标记&#xff0c;表示表单范围&#xff0c;所有的表单元素必须放进form标记中 2.input:用来设置表单输入元素&#xff0c;<input>元素根据不同的属性&#xff0c;可以有多种形式&#xff0c;如文本框&#xff08;text&#xff09;,密码框&#xff08;passw…

Maven入门学习笔记

一、maven介绍 Maven是一款自动化构建工具&#xff0c;专注服务于JAVA平台的项目构建和依赖管理。在javaEE开发的历史上构建工具的发展也经历了一系列的演化和变迁。 管理jar包 当我们使用SSM之后我们就需要使用非常多的jar包 没有maven找jar包非常的麻烦。 使用maven下载…

一次开发,多端部署--实例介绍

一、自适应布局 1、拉伸能力 容器组件尺寸发生变化时&#xff0c;增加或减小的空间全部分配给容器组件内指定区域。 Row() {// 通过flexGrow和flexShrink属性&#xff0c;将多余的空间全部分配给图片&#xff0c;将不足的控件全部分配给两侧的空白区域Row().width(150).flexG…

【代码随想录训练营第42期 Day57打卡 - 图论Part7 - Prim算法与Kruskal算法

目录 一、Prim算法 二、题目与题解 题目&#xff1a;卡码网 53. 寻宝 题目链接 题解1&#xff1a;Prim算法 题解2&#xff1a;Prim算法优化 题解3&#xff1a;Kruskal算法 三、小结 一、Prim算法与Kruskal算法 Prim算法是一种贪心算法&#xff0c;用于求解加权无向图的…

差分约束---将不等式转换为图的算法

概念&#xff1a;已知一个差分约束系统&#xff08;差分约束系统即一种特殊的n元一次不等式组&#xff09;&#xff0c;形如,要求求出是否存在一组解使得所有约束条件满足。由于在最短路中与该不等式形式相似&#xff0c;因此&#xff0c;可以利用图论&#xff0c;从对应的j点连…

探索Web3前沿:革新性算力共享平台,重塑数字资源利用新时代

基于Web3的算力共享平台 随着区块链技术的不断发展和Web3.0时代的到来,算力共享平台逐渐成为推动数字经济和人工智能发展的重要力量。基于Web3的算力共享平台通过去中心化、分布式网络等技术手段,实现了算力的高效、透明和安全的共享,为人工智能、科学研究、艺术创作等多个…

Kamailio-基于Homer与heplify的SIP信令监控-1

接上篇Kamailio监控&#xff0c;对Kamailio的一个基础监控有了一定的概念&#xff0c;但是光看数字如果发现问题&#xff0c;要如何回顾解决呢&#xff1f;生产环境不能随时随地抓包来确定链路的正常与否。 这个时候 Sipcapture 公司推出了Homer这个开源软件&#xff0c;目前G…

【软件测试】常用的开发、测试模型

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 今天给大家带来的是 【软件测试】常用的开发、测试模型&#xff0c;首先了解, 什么是软件的生命周期, 测试的生命周期, 常见的开发模型: 瀑布, 螺旋, 增量, 迭代, 敏捷. 常用的测试模型, …

银河麒麟桌面系统卸载应用报错快速解决

银河麒麟桌面系统卸载应用报错快速解决 1、问题简述2、解决方案步骤 1: 删除dpkg信息步骤 2: 强制卸载步骤 3: 验证与清理 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、问题简述 在银河麒麟桌面系统中卸载应用时&#xff0c;可能会遇…

AE 让合成重复循环播放

在合成上点右键 > Time > Enable Time Remapping 按住 Alt 键&#xff0c;点秒表图标 输入 loop_out("cycle", 0) 将子合成拖到此合成结束的位置 结束

Linux 上自动下载 Docker 依赖并离线安装的完整指南

Linux 上自动下载 Docker 依赖并离线安装的完整指南 文章目录 Linux 上自动下载 Docker 依赖并离线安装的完整指南一 添加软件源二 更新 yum 缓存三 下载依赖四 打包 rpm 文件五 离线安装 这篇指南详细讲解了如何在CentOS 7.9系统上&#xff0c;通过 yum命令自动下载Docker的所…

vue3使用leaflet+trackplayer实现非地图动画轨迹(市场平面图动态轨迹)

vue3使用leaflettrackplayer实现非地图动画轨迹(市场平面图动态轨迹) 先下载 leaflet 和 leaflet-trackplayer两个主要库 leaflet官方文档 npm install leaflet npm install leaflet-trackplayer然后在页面中引用 html <template><button click"playMap&quo…

LLM - 理解 多模态大语言模型 (MLLM) 的指令微调与相关技术 (四)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142063880 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…

第 12 篇 Helm 部署 Redis

文章目录 Redis Chart部署 Redis 单机版部署 Redis 哨兵版第 1 步&#xff1a;准备 values.yaml 配置文件第 2 步&#xff1a;安装 bitnami/redis第 3 步&#xff1a;解决 Pod Pending 问题查看 Pod 状态添加 PV 持久化卷创建 pv1创建 pv2创建 pv3 查看 Pod 状态 第 4 步&#…

java实际开发——数据库存储金额时用什么数据类型?(MySQL、PostgreSQL)

目录 java开发时金额用的数据类型——BigDecimal MySQL存储金额数据时用的数据类型是——decimal PostgreSQL存储金额数据时用的数据类型是——decimal 或 money java开发时金额用的数据类型——BigDecimal https://blog.csdn.net/Jilit_jilit/article/details/142180903?…

传统Malmquist-Luenberger指数与全局Malmquist-Luenberger指数的区别

1.全局技术前沿的构建 1.1传统ML指数 技术前沿的时间依赖性 传统的Malmquist-Luenberger&#xff08;ML&#xff09;指数在每个时期&#xff08;例如年份&#xff09;单独构建各自的技术前沿。这意味着每个时期的生产可能性集合和技术效率都是基于该时期的数据。 不可比性问…

【包教包会】CocosCreator3.xSprite和Label渐变色(支持3.x、支持原生、可合批)

完美适配Web、原生平台&#xff08;其余平台没测过&#xff09;。 下载地址&#xff1a;水煮肉片饭/Palette3.x 如何导入自己项目&#xff1a; 1、将Demo中Palette.ts复制到自己项目assets目录下 2、新建一个Sprite或Label节点&#xff0c;将Palette组件挂上去 3、设置顶点…

openstack之glance介绍

概念 glance为nova提供镜像服务&#xff0c;用于启动实例&#xff0c;预建镜像已安装cloud-init&#xff0c;可以访问openstack基金会获取操作系统镜像&#xff1a;官方镜像 格式 raw&#xff1a;无格式的镜像&#xff1b; vhd&#xff1a;hyper-v使用的格式&#xff1b; vm…