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

ops/2024/9/24 4:55:58/
  • 原文地址:https://aomediacodec.github.io/AV1.html" title=av1>av1-spec/AV1.html" title=av1>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)
    在这里插入图片描述


http://www.ppmy.cn/ops/110505.html

相关文章

MySQL之库和表操作

目录 一&#xff1a;对库的操作 1.创建数据库 2.查看数据库列表 3.显示创建数据库的语句 4.删除数据库 5.字符集与校验集 6.确认当前所处的数据库 7.修改数据库 8.备份和恢复 9.查看连接情况 二:对表的操作 1.创建表 2.查看表 3.删除表 4.修改表 接下来的日…

部署k8s基础环境

部署k8s基础环境 一、环境准备 1、主机准备&#xff1a; k8s-master&#xff08;192.168.2.90&#xff09;k8s-node01&#xff08;192.168.2.91&#xff09;k8s-node02&#xff08;192.168.2.92&#xff09; 2、关闭防火墙、selinux、NetworkManager [rootk8s-master ~]# …

详细分析linux中的MySql跳过密码验证以及Bug(图文)

目录 1.问题所示2. 基本知识3. 解决方法3.1 跳过验证Bug3.2 设定初始密码 1.问题所示 发现密码验证错误&#xff0c;遗失密码 2. 基本知识 停止MySQL服务&#xff1a;sudo systemctl stop mysql 以跳过权限表模式启动MySQL&#xff1a;sudo mysqld_safe --skip-grant-tables …

JAVAWeb-Servlet

一 Servlet简介 1.1 动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源. 例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Ser…

JS面试真题 part5

JS面试真题 part5 21、说说对事件循环的理解22、JavaScript本地存储方式有哪些&#xff1f;区别及应用场景&#xff1f;23、大文件上传如何断点续传&#xff1f;24、ajax原理是什么&#xff1f;如何实现&#xff1f;25、什么是防抖和节流&#xff1f;有什么区别&#xff1f;如何…

Linux下抓包分析Java应用程序HTTP接口调用:基于tcpdump与Wireshark的综合示例

Java应用程序常通过HTTP与外部系统交互&#xff0c;在复杂的应用场景下&#xff0c;了解Java应用程序在运行期间调用了哪些HTTP接口&#xff0c;以及请求与响应的具体参数&#xff0c;对开发调试、运维监控至关重要。本文将详细介绍如何通过Linux下的tcpdump抓包&#xff0c;并…

openharmony-界面适配

1. 像素单位 参考&#xff1a;像素单位-公共定义-ArkTS组件-ArkUI&#xff08;方舟UI框架&#xff09;-应用框架 - 华为HarmonyOS开发者 (huawei.com) 鸿蒙方舟框架为开发者提供了4种像素单位&#xff0c;即&#xff1a;px、vp、fp、lpx。并且框架采用vp为基准数据单位。类似…

Spring Boot基础

项目创建 项目启动 请求响应 RestController 1.返回值处理 RestController&#xff1a;这个注解结合了Controller和ResponseBody的功能。它默认将所有处理请求的方法的返回值直接作为响应体内容返回&#xff0c;主要用于构建RESTful API。返回的数据格式通常是JSON或XML&…