[AV1] AV1 Specification

这篇文章介绍下研究AV1必须要熟悉的AV1 Specification,也称为AV1 标准文档。

返回AV1专栏目录

AV1 标准文档

AV1的标准文档是可以通过AOM的官方Github页面拿到最新版本的。这里是链接。如果因为某些原因访问不到网站的话,可以在CSDN下载频道下载

下载下来的文档首页为
AV1 Bitstream & Decoding Process Specification Cover
我没有记错的话,全文应该是681页。从首页图中也可以看出,发布的时间正是参考软件libaom-av1的Version 1.0.0 Errata 1发布的时候,具体关于Reference Software的内容参考我的另一篇博文 [AV1] AV1 Reference Software

How to 阅读标准文档

标准文档一共分为六个部分,共计15章如下:

  1. Scope
  2. Terms and definitions
  3. Symbols and abbreviated terms
  4. Conventions
  5. Syntax structures
  6. Syntax structures semantics
  7. Decoding process
  8. Parsing process
  9. Additional tables
  10. 10章之后的内容 Annex

第一章我们一般跳过,就是说的这本标准所定义的内容。

从第二章开始就有点内容了,第二章可以看看术语,了解关于AV1的一些名词的解释,这些术语大部分都是视频编解码的标准间所通用的,比如说 luma,chroma,block等用语。

第三章也是一些术语,但这些术语是代码中的定义,一般是宏定义,这些量都是定死了的,一般声明为C++中的const常量或者直接预处理define出来,看这些有利于进一步读懂源码。

第四章是一些约定俗成的符号定义,这些一般过一遍就好,这些符号会在后面的semantics部分解释每一个syntax的时候,如果要计算,那么就会用到,用到的时候再回来翻就行了。

第五章就真正来到了重要的地方了,这是语法结构部分,解码器解析的时候就是按照这个表来进行一个个地读取syntax,这个过程叫做parsing,我们挑一个条目来看看:
syntax structure example
这是OBU的头部语法(OBU是啥?看看 [AV1] Open Bitstream Unit)这里代码的写法与实际代码中相对应。

从这里我们可以看出,解析一个obu_header,需要一共解析五个syntax,这里的syntax就是用黑体表示,并且右边Type中有值的项目,五个syntax分别为

  • obu_forbidden_bit
  • obu_type
  • obu_extension_flag
  • obu_has_size_field
  • obu_reserved_1bit

那右边的 f(1)是什么意思呢?我们可以看到第4.8节,4.9节,4.10节,这里告诉你这些个表达到底是什么意思。(这里的f(1)代表从流中读出一个比特,解析为unsigned number)

第六章就是针对第五章中的每一个syntax的含义解释了,这个含义解释的专业术语叫semantic,称为语义,
syntax semantic
在这里,我们可以看到第五章的几个syntax的具体含义。

第七章是解码过程,就是利用我们第五章parsing出来的syntax,然后正式进入解码流程,最终还原为reconstructed frame/sequence的过程描述。

第八章是parsing过程,这章主要讲解我们之前说的syntax所说的读取一个比特,读取多个比特,或者使用算数编码读取比特的这些熵编码过程的逆向过程的实现。

第九章就是一些表格,包含标准里根据经验或者大量实验得出的一些固定的预设值,这些值(table)都可以直接在代码里找到。

第十章开始就是附录了,包括profile,level,比特流格式等材料。

做视频编解码,这本标准,肯定是少不了的。

猜你喜欢

转载自blog.csdn.net/starperfection/article/details/109146163