当前位置: 首页 > news >正文

AV1 Bitstream Decoding Process Specification--[4]:语法结构

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

语法结构

通用(General)

  • 这一节以表格形式展示了语法结构。每个语法元素的含义在第6节中介绍。

低开销比特流格式(Low overhead bitstream format)

  • 本规范定义了一种低开销比特流格式,它是由本节中定义的OBU(Object Based Unit)语法元素序列构成的。使用此格式时,obu_has_size_field必须等于1。对于需要更容易跳过帧或时间单元的格式的应用,附件B中定义了一种长度限定的比特流格式。
  • 派生规范,例如使能存储AV1视频与音频或字幕一起的容器格式,应指明它们依赖于这些格式中的哪一种。也允许其他将OBUs打包成比特流格式的方法。

OBU语法(OBU syntax)

  1. 通用 OBU 语法( General OBU syntax)
    在这里插入图片描述
    在这里插入图片描述
  2. OBU 头部语法(OBU header syntax)
    在这里插入图片描述
  3. OBU 扩展头部语法(OBU extension header syntax)
    在这里插入图片描述
  4. 拖尾比特语法(Trailing bits syntax)
    在这里插入图片描述
  5. 字节对齐语法(Byte alignment syntax)
    在这里插入图片描述

保留 OBU 语法(Reserved OBU syntax)

在这里插入图片描述

  • 注意:保留的OBUs没有定义的语法。obu_type的保留值是为将来使用而保留的。如果解码器不理解obu_type,应该忽略整个OBU。可以根据obu_size来忽略OBU。对于这种OBU类型的有效负载数据的有效内容的最后一字节被认为是不等于零的最后一字节。这个规则是为了防止系统将尾随的零字节解释为OBU中尾随位的延续而丢弃有效的字节。这意味着,当这种OBU类型有任何有效负载数据时,至少有一个字节的有效负载数据(包括尾随位)不应等于0。

序列头部 OBU 语法(Sequence header OBU syntax)

  1. 通用序列头部 OBU 语法(General sequence header OBU syntax)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 颜色配置语法(Color config syntax)
    在这里插入图片描述
    在这里插入图片描述
  3. 时间信息语法(Timing info syntax)
    在这里插入图片描述
  4. 解码器模式信息语法(Decoder model info syntax)
    在这里插入图片描述
  5. 操作参数信息语法(Operating parameters info syntax)
    在这里插入图片描述

时间分隔符 obu 语法(Temporal delimiter obu syntax)

  • 注意:时间分隔符有一个空的有效载荷。
    在这里插入图片描述

填充 OBU 语法(Padding OBU syntax)

  • 注意:obu_padding_length(OBU填充长度)没有在比特流中编码,但可以根据obu_size(OBU大小)减去尾部字节的数量来计算。实际上,由于这是为了被跳过而添加的填充数据,解码器不需要确定该长度或尾部字节的数量。它们可以忽略整个OBU。可以根据obu_size忽略整个OBU。对于这种OBU类型的有效载荷数据,其有效内容的最后一个字节被认为是最后一个不为零的字节。这个规则是为了防止那些将尾部零字节解释为OBU中尾部位延续的系统错误地丢弃有效字节。这意味着,当这种OBU类型有任何有效载荷数据时,至少有一个字节的有效载荷数据(包括尾部位)不应等于0。
    在这里插入图片描述

元数据OBU语法(Metadata OBU syntax)

  1. 通用元数据 OBU 语法(General metadata OBU syntax)
    • 注意:当metadata_type(元数据类型)等于为将来使用或用户私有值保留的值时,此规范中并未定义metadata_obu(元数据OBU)的确切语法。如果解码器不理解metadata_type,应该忽略整个OBU。有效数据内容的最后一个字节被认为是最后一个不为零的字节。这个规则是为了防止那些将尾部零字节解释为OBU中尾部位延续的系统错误地丢弃有效字节。这意味着,当这种OBU类型有任何有效载荷数据时,至少有一个字节的有效载荷数据(包括尾部位)不应等于0。
      在这里插入图片描述
  2. 元数据 ITUT T35 语法(Metadata ITUT T35 syntax)
    • 注意:itu_t_t35_payload_bytes 的确切语法在本规范中未定义。外部规范可以定义语法。如果解码器不理解它,应该忽略整个OBU。有效数据内容的最后一个字节被认为是最后一个不为零的字节。这个规则是为了防止那些将尾部零字节解释为OBU中尾部位延续的系统错误地丢弃有效字节。这意味着,当这种OBU类型有任何有效载荷数据时,至少有一个字节的有效载荷数据(包括尾部位)不应等于0。
      在这里插入图片描述
  3. 元数据高动态范围HDR内容光照水平语法(Metadata high dynamic range content light level syntax)
    在这里插入图片描述
  4. 元数据高动态范围HDR主控显示色域体积语法(Metadata high dynamic range mastering display color volume syntax)
    在这里插入图片描述
  5. 元数据可分层语法(Metadata scalability syntax)
    在这里插入图片描述
  6. 可分层结构语法(Scalability structure syntax)
    在这里插入图片描述
  7. 元数据时间码语法(Metadata timecode syntax)
    在这里插入图片描述

帧头部 OBU 语法(Frame header OBU syntax)

  1. 通用帧头部 OBU 语法(General frame header OBU syntax)
    在这里插入图片描述
  2. 未压缩头部语法(Uncompressed header syntax)
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  3. 获取相对距离函数(Get relative distance function)
    • 这个函数通过将两个顺序提示值相减的结果进行符号扩展,来计算它们之间的距离。

在这里插入图片描述

  1. 参考帧标记函数(Reference frame marking function)
    在这里插入图片描述

  2. 帧大小语法( Frame size syntax)
    在这里插入图片描述

  3. 渲染大小语法(Render size syntax)
    在这里插入图片描述

  4. 有参考性的帧大小语法(Frame size with refs syntax)
    在这里插入图片描述

  5. 超分辨率参数语法(Superres params syntax)
    在这里插入图片描述

  6. 计算图像大小函数(Compute image size function)
    在这里插入图片描述

  7. 插值滤波语法(Interpolation filter syntax)
    在这里插入图片描述

  8. 环路滤波参数语法(Loop filter params syntax)
    在这里插入图片描述在这里插入图片描述

  9. 量化参数语法(Quantization params syntax)
    在这里插入图片描述在这里插入图片描述

  10. 量化增量语法(Delta quantizer syntax)
    在这里插入图片描述

  11. 段参数语法(Segmentation params syntax)
    在这里插入图片描述在这里插入图片描述

    • 在这种语法中使用的常量查找表被定义为:
      在这里插入图片描述
  12. 瓦片 Tile 信息语法(Tile info syntax)
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

  13. 瓦片 Tile 大小计算函数(Tile size calculation function)

    • tile_log2 返回最小的值 k,使得 blkSize << k 大于或等于目标值。
      在这里插入图片描述
  14. 量化器索引增量参数语法(Quantizer index delta parameters syntax)
    在这里插入图片描述

  15. 环路滤波增量参数语法(Loop filter delta parameters syntax)
    在这里插入图片描述

  16. CDEF 参数语法(CDEF params syntax)
    - (Constrained Directional Enhancement Filter, 限制性方向增强滤波器)
    在这里插入图片描述
    在这里插入图片描述

  17. 环路恢复参数语法(Loop restoration params syntax)
    在这里插入图片描述

  • 其中 Remap_Lr_Type 是一个常量查找表,规定如下:
    在这里插入图片描述
  1. 变换模式语法(TX mode syntax)
    在这里插入图片描述

  2. 跳过模式参数语法(Skip mode params syntax)
    在这里插入图片描述
    在这里插入图片描述

  3. 帧参考模式语法(Frame reference mode syntax)
    在这里插入图片描述

  4. 全局运动参数语法(Global motion params syntax)
    在这里插入图片描述
    在这里插入图片描述

  5. 全局参数语法(Global param syntax)
    - 注意:当 force_integer_mv 等于 1 时,仍然会读取一些用于平移分量的小数位。然而,在设置全局运动矢量(Setup Global MV)的过程中,这些小数位将被丢弃。
    在这里插入图片描述

  6. 解码带有引用的带符号下标指数语法(Decode signed subexp with ref syntax)

    • 注意:decode_signed_subexp_with_ref 将返回一个在 low 到 high - 1(含)范围内的值。
      在这里插入图片描述
  7. 解码带有引用的无符号下标指数语法(Decode unsigned subexp with ref syntax)

    • 注意:decode_unsigned_subex_with_ref 将返回一个在 0 到 mx - 1(含)范围内的值。
      在这里插入图片描述
  8. 解码下标语法(Decode subexp syntax)
    在这里插入图片描述

  9. 逆中心化函数(Inverse recenter function)
    在这里插入图片描述

  10. 电影颗粒参数语法(Film grain params syntax)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  11. 时间点信息语法(Temporal point info syntax)
    在这里插入图片描述

帧 OBU 语法(Frame OBU syntax)

在这里插入图片描述

瓦片组 OBU 语法(Tile group OBU syntax)

  1. 通用瓦片组 OBU 语法( General tile group OBU syntax)
    在这里插入图片描述
    在这里插入图片描述

  2. 解码瓦片语法(Decode tile syntax)
    在这里插入图片描述
    其中 Sgrproj_Xqd_Mid 和 Wiener_Taps_Mid 是被规定为如下的常量查找表:
    在这里插入图片描述

  3. 清除块解码标志函数(Clear block decoded flags function)
    在这里插入图片描述

  4. 解码分区语法(Decode partition syntax)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  5. 解码块语法(Decode block syntax)
    在这里插入图片描述
    在这里插入图片描述
    其中 reset_block_context() 被指定为:
    在这里插入图片描述

  6. 模式信息语法(Mode info syntax)
    在这里插入图片描述

  7. 帧内模式信息语法(Intra frame mode info syntax)
    在这里插入图片描述
    在这里插入图片描述

  8. 帧内段ID语法(Intra segment ID syntax)
    在这里插入图片描述

  9. 读取段 ID 语法(Read segment ID syntax)
    在这里插入图片描述
    其中neg_deinterleave是一个函数,定义如下:
    在这里插入图片描述

  10. skip模式语法(Skip mode syntax)
    在这里插入图片描述

  11. skip语法(Skip syntax)
    在这里插入图片描述

  12. 量化器索引增量语法(Quantizer index delta syntax)
    在这里插入图片描述

  13. 环路滤波增量语法(Loop filter delta syntax)
    在这里插入图片描述

  14. 段特征激活函数(Segmentation feature active function)
    在这里插入图片描述

  15. 变换大小语法(TX size syntax)
    在这里插入图片描述
    Max_Tx_Depth 表指定了每个块大小的最大变换深度:
    在这里插入图片描述
    注意:Max_Tx_Depth 包含了变换必须分割的次数,以达到 4x4 变换大小。这个数字可以大于 MAX_TX_DEPTH。然而,不可能编码一个大于 MAX_TX_DEPTH 的变换深度,因为 tx_depth 只能编码范围在 0 到 2 之间的值。

  16. 块变换大小语法(Block TX size syntax)
    在这里插入图片描述

  17. 可变变换大小语法(Var TX size syntax)
    read_var_tx_size 用于读取变换大小树。
    在这里插入图片描述

  18. 帧间模式信息语法(Inter frame mode info syntax)
    在这里插入图片描述

  19. 帧间段ID语法(Inter segment ID syntax)
    这在跳过语法元素被读取之前(preSkip 等于 1)和之后(preSkip 等于 0)被调用。
    在这里插入图片描述
    在这里插入图片描述

  20. 是帧间语法(Is inter syntax)
    在这里插入图片描述

  21. 获取段ID函数(Get segment ID function)
    预测的段ID是当前块覆盖的分割图中屏幕上的区域中找到的最小值。
    在这里插入图片描述

  22. 帧内块模式信息语法(Intra block mode info syntax)
    在这里插入图片描述

  23. 帧间模式信息语法(Inter block mode info syntax)
    在这里插入图片描述
    在这里插入图片描述
    函数 has_nearmv 被定义为:
    在这里插入图片描述
    函数needs_interp_filter被定义为:
    在这里插入图片描述

  24. 过滤帧内模式信息语法(Filter intra mode info syntax)
    在这里插入图片描述

  25. 参考帧语法(Ref frames syntax)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  26. 分配运动矢量语法(Assign MV syntax)
    在这里插入图片描述
    在这里插入图片描述

  27. 读取运动模式语法(Read motion mode syntax)
    在这里插入图片描述
    其中 is_scaled 是一个函数,用于确定参考帧是否使用了缩放,并且被指定为:
    在这里插入图片描述

  28. 读取帧间帧内语法(Read inter intra syntax)
    在这里插入图片描述

  29. 读取复合类型语法(Read compound type syntax)
    在这里插入图片描述
    在这里插入图片描述

  30. 获取模式函数(Get mode function)
    在这里插入图片描述

  31. 运动矢量语法(MV syntax)
    在这里插入图片描述

  32. 运动矢量分量语法(MV component syntax)
    在这里插入图片描述

  33. 计算预测语法(Compute prediction syntax)
    在这里插入图片描述
    在这里插入图片描述

  34. 残差语法(Residual syntax)
    在这里插入图片描述
    在这里插入图片描述

  35. 变换块语法(Transform block syntax)
    在这里插入图片描述
    在这里插入图片描述

  36. 变换树语法(Transform tree syntax)
    transform_tree 用于读取以变换树形式排列的多个变换块。
    在这里插入图片描述
    其中 find_tx_size 用于找到与给定尺寸匹配的变换大小,其定义如下:
    在这里插入图片描述

  37. 获取变换大小函数(Get TX size function)
    在这里插入图片描述

  38. 获取平面残差尺寸函数(Get plane residual size function)
    get_plane_residual_size 函数返回指定平面的残差块的大小。(残差块的宽度和高度至少都将等于4。)
    在这里插入图片描述
    Subsampled_Size 表被定义为:
    在这里插入图片描述

  39. 系数语法(Coefficients syntax)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  40. 计算变换类型函数(Compute transform type function)
    在这里插入图片描述
    在这里插入图片描述
    其中 Tx_Type_In_Set_Inter 和 Tx_Type_In_Set_Intra 两个表被如下指定:
    在这里插入图片描述

  41. 获取扫描函数(Get scan function)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  42. 帧内角度信息亮度分量语法(Intra angle info luma syntax)
    在这里插入图片描述

  43. 帧内角度信息色度分量语法(Intra angle info chroma syntax)
    在这里插入图片描述

  44. 是否为方向模式函数(Is directional mode function)
    在这里插入图片描述

  45. 读取 CFL alphas 语法(Read CFL alphas syntax)
    在这里插入图片描述

  46. 调色板模式信息语法(Palette mode info syntax)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 函数 sort(arr, i1, i2)会将数组 arr 中的子数组就地按升序排序。需要排序的子数组包含索引 i1 和 i2 之间的元素(包括索引 i1 和 i2)。
    • 注意:调色板颜色是按升序生成的。调色板缓存也是按升序排列的。这意味着在实现中,排序函数可以通过合并两个已排序的列表来替代。
    • 其中,函数 get_palette_cache,用于将上方和左侧的调色板合并形成一个缓存,其规定如下:

在这里插入图片描述
在这里插入图片描述
注意:get_palette_cache 函数的作用相当于将上方和左侧可用的调色板颜色一起排序,并去除任何重复项。

  1. 变换类型语法(Transform type syntax)
    在这里插入图片描述
    在这里插入图片描述
    其中函数中使用的反转表被如下指定:
    在这里插入图片描述

  2. 获取变换设置函数(Get transform set function)
    在这里插入图片描述

  3. 调色板标记语法(Palette tokens syntax)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. 调色板颜色上下文函数(Palette color context function)
    在这里插入图片描述
    在这里插入图片描述

  5. 是否在内部函数(Is inside function)
    is_inside 函数用于确定候选位置是否在当前瓦片内部。
    在这里插入图片描述

  6. 是否在内部滤波器区域函数(Is inside filter region function)
    is_inside_filter_region 函数用于确定候选位置是否在用于CDEF滤波的区域内。
    在这里插入图片描述

  7. 限制运动矢量行函数(Clamp MV row function)
    在这里插入图片描述

  8. 限制运动矢量列函数(Clamp MV col function)
    在这里插入图片描述

  9. 清除 CDEF 函数(Clear CDEF function)
    在这里插入图片描述

  10. 读取CDEF语法(Read CDEF syntax)
    在这里插入图片描述

  11. 读取循环恢复语法(Read loop restoration syntax)
    在这里插入图片描述
    在这里插入图片描述
    其中 count_units_in_frame 是一个被指定为的函数:
    在这里插入图片描述

  12. 读取循环恢复单元语法(Read loop restoration unit syntax)
    在这里插入图片描述
    在这里插入图片描述
    其中,Wiener_Taps_Min、Wiener_Taps_Max、Wiener_Taps_K、Sgrproj_Xqd_Min 和 Sgrproj_Xqd_Max 是固定的查找表:
    在这里插入图片描述
    Sgr_Params 是在第 7.17.3 节定义的固定查找表,而 decode_signed_subexp_with_ref_bool 是一个函数,其规定如下:
    在这里插入图片描述
    注意:decode_signed_subexp_with_ref_bool 函数与 decode_signed_subexp_with_ref 函数相似,不同之处在于用于表示符号的比特是使用算术编码而不是直接从比特流中读取。

瓦片列表 OBU 语法(Tile list OBU syntax)

  1. 通用瓦片列表 OBU 语法(General tile list OBU syntax)
    在这里插入图片描述

  2. 瓦片列表头目语法(Tile list entry syntax)
    在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • monaco editor 在react中的使用
  • 设计模式——对象池模式
  • pg入门3—详解tablespaces2
  • Pandas中DataFrame表格型数据结构
  • 傅里叶变换的基本性质和有关定理
  • 硬件工程师笔试面试——保险丝
  • 【BoF】《Bag of Freebies for Training Object Detection Neural Networks》
  • 网络安全(黑客技术)2024年三个月自学计划
  • 3.接口测试的基础/接口关联(Jmeter工具/场景一:我一个人负责所有的接口,项目规模不大)
  • Visual Studio-X64汇编编写
  • 玩转RabbitMQ声明队列交换机、消息转换器
  • Python 入门教程(4)数据类型 | 4.4、布尔类型
  • QT 修改全局鼠标光标样式并支持还原样式
  • redis群集三种模式:主从复制、哨兵、集群
  • Java运算符有哪些?深入解析Java运算符:从基础到进阶的全方位指南(超全表格)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 5、React组件事件详解
  • Angular 2 DI - IoC DI - 1
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Bytom交易说明(账户管理模式)
  • classpath对获取配置文件的影响
  • const let
  • emacs初体验
  • es6--symbol
  • github从入门到放弃(1)
  • HTTP中GET与POST的区别 99%的错误认识
  • linux学习笔记
  • PAT A1092
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • WebSocket使用
  • 分布式事物理论与实践
  • 关于 Cirru Editor 存储格式
  • 浅谈web中前端模板引擎的使用
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 异步
  • 优化 Vue 项目编译文件大小
  • 中文输入法与React文本输入框的问题与解决方案
  • zabbix3.2监控linux磁盘IO
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​渐进式Web应用PWA的未来
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • !!java web学习笔记(一到五)
  • !$boo在php中什么意思,php前戏
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #pragma预处理命令
  • #QT 笔记一
  • #Ubuntu(修改root信息)
  • #前后端分离# 头条发布系统
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (第二周)效能测试
  • (五)Python 垃圾回收机制
  • .NET Core 中的路径问题