- 原文地址:https://aomediacodec.github.io/av1-spec/av1-spec.pdf
- 没有梯子的下载地址:AV1 Bitstream & Decoding Process Specification
- 摘要:这份文档定义了开放媒体联盟(Alliance for Open Media)AV1视频编解码器的比特流格式和解码过程。
- 规范:此文档规定了开放媒体联盟(Alliance for Open Media)AV1比特流格式和解码过程。
符号和缩写术语
- DCT:离散余弦变换,一种广泛应用于信号处理和图像压缩的变换技术,特别是在 JPEG 和 MPEG 系列视频编解码器中。
- ADST:非对称离散正弦变换,一种用于视频编码中的变换技术,特别适合处理图像中的垂直边缘,是 AV1 编解码器中的一个特性。
- LSB:最不显著比特,在数字表示中,数值最右边的比特,通常表示数值中的最小部分。
- MSB:最显著比特,在数字表示中,数值最左边的比特,通常表示数值中的最大部分。
- WHT:沃尔什哈达玛变换,一种简单的变换,用于将信号分解为不同频率的成分,常用于早期的视频和音频编码标准中。
规范文档中使用了许多常量整数。与特定语法元素的语义相关的常量在第6节中定义。更多的常量在下文中定义。
符号名字 | 值 | 描述 |
---|---|---|
REFS_PER_FRAME | 7 | 用于帧间预测的参考帧数量 |
TOTAL_REFS_PER_FRAME | 8 | 参考帧类型的总数(包括帧内类型) |
BLOCK_SIZE_GROUPS | 4 | 在解码 y_mode 时的上下文数量 |
BLOCK_SIZES | 22 | 使用的不同块尺寸的总数 |
BLOCK_INVALID | 22 | 用于标记不允许的分割选择的哨兵值 |
MAX_SB_SIZE | 128 | 亮度样本中超块的最大尺寸 |
MI_SIZE | 4 | 亮度样本中模式信息块的最小尺寸 |
MI_SIZE_LOG2 | 2 | 模式信息块最小尺寸的以2为底的对数 |
MAX_TILE_WIDTH | 4096 | 以亮度样本为单位的瓦片(Tile)最大宽度 |
MAX_TILE_AREA | 4096*2034 | 以亮度样本为单位的瓦片(Tile)最大面积 |
MAX_TILE_ROWS | 64 | 瓦片行的最大数量 |
MAX_TILE_COLS | 64 | 瓦片列的最大数量 |
INTRABC_DELAY_PIXELS | 256 | 在使用帧内块复制之前水平方向上的亮度样本数,编码器在处理依赖于后续块的块时需要延迟的像素数量,用于处理帧内预测模式(INTRABC)时的像素延迟问题 |
INTRABC_DELAY_SB64 | 4 | 在使用帧内块复制之前,需要的 64x64 块的数量,是在采用帧内块复制技术时,必须先处理一定数量的 64x64 大小的块,然后才能应用帧内块复制技术进行编码 |
NUM_REF_FRAMES | 8 | 可以存储用于将来参考的帧的数量 |
IS_INTER_CONTEXTS | 4 | 用于判断是否为帧间模式is_inter的上下文数量,在做出这个决策时,编码器会考虑的不同上下文或场景的数量。不同的上下文基于先前帧的类型、运动矢量、场景变化等信息,从而帮助编码器决定最佳的压缩策略。 |
REF_CONTEXTS | 3 | 用于 single_ref(单重参考帧)、comp_ref(复合参考帧)、comp_bwdref(复合后向参考帧)、uni_comp_ref(单一复合参考帧)、uni_comp_ref_p1(单一复合参考帧第一选项)和 uni_comp_ref_p2(单一复合参考帧第二选项)的上下文数量 |
MAX_SEGMENTS | 8 | 分割图中允许的分割段数 |
SEGMENT_ID_CONTEXTS | 3 | 用于 segment_id 的上下文数量,指的是确定段ID(segment_id)时使用的上下文模式的数目 |
SEG_LVL_ALT_Q | 0 | 代表“Segment Level Alternate Quantization”的缩写;量化器分段特征的索引,在视频编码的分割级别上应用的替代量化参数。在许多视频编码标准中,如H.264、HEVC或AV1,编码器可以将帧分割成多个区域(或段),并为每个区域应用不同的量化参数来优化编码效率和图像质量。 |
SEG_LVL_ALT_LF_Y_V | 1 | 代表“Segment Level Alternate Loop Filter along the vertical direction for luma component”的缩写;垂直亮度环滤波器分段特征的索引,这个参数用于调整视频编码中环滤波器(loop filter)的强度,是视频编码中一个用于优化环滤波效果的参数,特别是在垂直方向上对亮度分量的处理,有助于提高编码后视频的图像质量和减少视觉伪影。 |
SEG_LVL_REF_FRAME | 5 | 是“Segment Level Reference Frame”的缩写,参考帧分段特征的索引,用于标识和引用特定参考帧分段特征的编号或标记;编码器可以将一帧视频分割成多个段(segments),并为每个段选择不同的参考帧。这种技术称为参考帧分段(reference frame segmentation),它允许编码器根据视频内容的不同特点为不同的视频段选择最优的参考帧,以提高编码效率和图像质量。 |
SEG_LVL_SKIP | 6 | 跳过分段特征的索引 |
SEG_LVL_GLOBALMV | 7 | 全局运动矢量特征的索引 |
SEG_LVL_MAX | 8 | 段特征数量 |
TX_SIZE_CONTEXTS | 3 | 变换大小的上下文数量 |
INTERP_FILTERS | 3 | 插值滤波器interp_filter的值的数量 |
INTERP_FILTER_CONTEXTS | 16 | 插值滤波器interp_filter的上下文数量 |
SKIP_MODE_CONTEXTS | 3 | 解码跳过模式 skip_mode 的上下文数量 |
SKIP_CONTEXTS | 3 | 解码跳过的上下文数量 |
PARTITION_CONTEXTS | 4 | 解码分区partition时的上下文数量 |
TX_SIZES | 5 | 正方形变换尺寸的数量 |
TX_SIZES_ALL | 19 | 变换尺寸的数量(包括非正方形尺寸) |
TX_MODES | 3 | 变换模式(tx_mode)的值的数量 |
DCT_DCT | 0 | 行使用DCT进行逆变换,列也使用DCT进行逆变换 |
ADST_DCT | 1 | 行使用DCT进行逆变换,列使用ADST进行逆变换 |
DCT_ADST | 2 | 行使用ADST进行逆变换,列使用DCT进行逆变换 |
ADST_ADST | 3 | 行使用ADST进行逆变换,列使用ADST进行逆变换 |
FLIPADST_DCT | 4 | 行使用DCT进行逆变换,列使用FLIPADST进行逆变换,FLIPADST(Flip Adjusted Discrete Sine Transform,翻转调整离散正弦变换) |
DCT_FLIPADST | 5 | 行使用FLIPADST进行逆变换,列使用DCT进行逆变换 |
FLIPADST_FLIPADST | 6 | 行使用FLIPADST进行逆变换,列使用FLIPADST进行逆变换 |
ADST_FLIPADST | 7 | 行使用FLIPADST进行逆变换,列使用ADST进行逆变换 |
FLIPADST_ADST | 8 | 行使用ADST进行逆变换,列使用FLIPADST进行逆变换 |
IDTX | 9 | 行和列都使用恒等变换进行逆变换 |
V_DCT | 10 | 行使用恒等逆变换,列使用DCT逆变换 |
H_DCT | 11 | 行使用DCT变换,列使用恒等逆变换 |
V_ADST | 12 | 行使用恒等逆变换,列使用ADST逆变换 |
H_ADST | 13 | 行使用ADST变换,列使用恒等逆变换 |
V_FLIPADST | 14 | 行使用恒等逆变换,列使用FLIPADST逆变换 |
H_FLIPADST | 15 | 行使用FLIPADST变换,列使用恒等逆变换 |
TX_TYPES | 16 | 逆变换类型的数目 |
MB_MODE_COUNT | 17 | YMode的取值数量 |
INTRA_MODES | 13 | y_mode 的取值数量 |
UV_INTRA_MODES_CFL_NOT_ALLOWED | 13 | 当不允许从亮度获取色度信息时,uv_mode的取值数量 |
UV_INTRA_MODES_CFL_ALLOWED | 14 | 当允许从亮度获取色度信息时,uv_mode的取值数量 |
COMPOUND_MODES | 8 | 复合模式compound_mode的取值数量 |
COMPOUND_MODE_CONTEXTS | 8 | 复合模式的上下文数量 |
COMP_NEWMV_CTXS | 5 | 在构建复合模式(compound_mode)上下文时使用的新的运动矢量(mv)值的数量 |
NEW_MV_CONTEXTS | 6 | 新运动矢量(new_mv)的上下文数量 |
ZERO_MV_CONTEXTS | 2 | 零运动矢量(zero_mv)的上下文数量,零运动矢量(zero_mv)是一种特殊的运动矢量,它指示当前块或宏块与参考帧中的相应块没有相对运动,即当前块与参考帧中的块完全对齐。这种信息在编码过程中非常重要,因为它可以用来减少编码的比特数,同时保持视频质量。 |
REF_MV_CONTEXTS | 6 | 参考运动矢量(ref_mv)的上下文数量 |
DRL_MODE_CONTEXTS | 3 | 直接复制模式(drl_mode)的上下文数量 |
MV_CONTEXTS | 2 | 解码运动矢量时的上下文数量,包括一个用于内部块复制的上下文 |
MV_INTRABC_CONTEXT | 1 | 用于内部块复制的运动矢量上下文 |
MV_JOINTS | 4 | mv_joint的取值数量,mv_joint指的是运动矢量(Motion Vector, MV)的联合模式 |
MV_CLASSES | 11 | mv_class的取值数量,指的是运动矢量(Motion Vector, MV)的分类或等级,它用于在编码过程中对运动矢量进行更细致的管理和优化 |
CLASS0_SIZE | 2 | mv_class0_bit的取值数量,与运动矢量分类相关的一个特定的比特位或编码元素。 |
MV_OFFSET_BITS | 10 | 解码运动矢量的最多数位数 |
MAX_LOOP_FILTER | 63 | 用于环路滤波的最大值 |
REF_SCALE_SHIFT | 14 | 缩放参考帧时的位数精度 |
SUBPEL_BITS | 4 | 选择帧间预测滤波器核时的位数精度 |
SUBPEL_MASK | 15 | ( 1 << SUBPEL_BITS ) - 1 |
SCALE_SUBPEL_BITS | 10 | 计算帧间预测位置时的位数精度 |
MV_BORDER | 128 | 裁剪运动矢量时使用的值,在处理运动矢量时,为了限制MV值不超过一定范围而使用的一个最大或最小阈值。这种裁剪操作通常用于避免过大的运动矢量导致的图像质量下降或编码效率降低。 |
PALETTE_COLOR_CONTEXTS | 5 | 颜色上下文的取值数量 |
PALETTE_MAX_COLOR_CONTEXT_HASH | 8 | 颜色上下文哈希与颜色上下文之间的映射数量,即将颜色上下文的信息通过哈希函数映射到特定值或者索引的数量 |
PALETTE_BLOCK_SIZE_CONTEXTS | 7 | 调色板块大小的取值数量 |
PALETTE_Y_MODE_CONTEXTS | 3 | 调色板 Y 平面模式上下文的取值数量 |
PALETTE_UV_MODE_CONTEXTS | 2 | 调色板 U 平面和 V 平面模式上下文的取值数量 |
PALETTE_SIZES | 7 | 调色板大小取值的数量 |
PALETTE_COLORS | 8 | 调色板颜色的取值数量 |
PALETTE_NUM_NEIGHBORS | 3 | 在调色板计算中考虑的邻近像素数量 |
DELTA_Q_SMALL | 3 | 量化器索引差值替代编码的值 |
DELTA_LF_SMALL | 3 | 环路滤波器差值替代编码的值 |
QM_TOTAL_SIZE | 3344 | 量化器矩阵中的值的数量 |
MAX_ANGLE_DELTA | 3 | AngleDeltaY 和 AngleDeltaUV 的最大幅度 |
DIRECTIONAL_MODES | 8 | 方向性帧内模式的数量 |
ANGLE_STEP | 3 | AngleDeltaY 或 AngleDeltaUV 每个单位增加的步进度数数量 |
TX_SET_TYPES_INTRA | 3 | 帧内变换集合类型的数目 |
TX_SET_TYPES_INTER | 4 | 帧间变换集合类型的数目 |
WARPEDMODEL_PREC_BITS | 16 | 变形运动模型的内部精度 |
IDENTITY | 0 | 变形模型仅仅是一个恒等变换 |
TRANSLATION | 1 | 变形模型是一种纯粹的平移 |
ROTZOOM | 2 | 变形模型是旋转 + 对称缩放 + 平移 |
AFFINE | 3 | 变形模型是一个一般仿射变换 |
GM_ABS_TRANS_BITS | 12 | 如果是 ROTZOOM 或 AFFINE 模型的一部分,全局运动模型的平移分量编码所需的位数 |
GM_ABS_TRANS_ONLY_BITS | 9 | 如果是平移模型的一部分,全局运动模型的平移分量编码所需的位数 |
GM_ABS_ALPHA_BITS | 12 | 全局运动模型的非平移分量编码所需的位数 |
DIV_LUT_PREC_BITS | 14 | 除数查找表中条目分数位数的数量 |
DIV_LUT_BITS | 8 | 查找表中查找除数时使用的分数位数 |
DIV_LUT_NUM | 257 | 除数查找表中的条目数量 |
MOTION_MODES | 3 | 运动模式的值的数量 |
SIMPLE | 0 | 使用平移或全局运动补偿 |
OBMC | 1 | 使用重叠块运动补偿 |
LOCALWARP | 2 | 使用局部变形运动补偿 |
LEAST_SQUARES_SAMPLES_MAX | 8 | 计算局部变形时使用的最大样本数量 |
LS_MV_MAX | 256 | 局部变形计算中包含的最大运动矢量差异 |
WARPEDMODEL_TRANS_CLAMP | 1<<23 | 用于变形平移分量的钳制值 |
WARPEDMODEL_NONDIAGAFFINE_CLAMP | 1<<13 | 用于变形矩阵分量的钳制值 |
WARPEDPIXEL_PREC_SHIFTS | 1<<6 | 在变形滤波中使用的相位数量 |
WARPEDDIFF_PREC_BITS | 10 | 在变形滤波中额外使用的精度位数 |
GM_ALPHA_PREC_BITS | 15 | 发送非平移性变形模型系数时使用的分数位数 |
GM_TRANS_PREC_BITS | 6 | 发送平移性变形模型系数时使用的分数位数 |
GM_TRANS_ONLY_PREC_BITS | 3 | 用于纯平移性变形的分数位数 |
INTERINTRA_MODES | 4 | 帧间帧内模式的数量 |
MASK_MASTER_SIZE | 64 | 主掩码数组的大小 |
SEGMENT_ID_PREDICTED_CONTEXTS | 3 | 用于预测段ID segment_id_predicted 的上下文数量 |
IS_INTER_CONTEXTS | 4 | 用于判断是否为帧间模式is_inter 的上下文数量 |
SKIP_CONTEXTS | 3 | 用于跳过模式 skip 的上下文数量 |
FWD_REFS | 4 | 前向参考帧的语法元素数量 |
BWD_REFS | 3 | 后向参考帧的语法元素数量 |
SINGLE_REFS | 7 | 单参考帧的语法元素数量 |
UNIDIR_COMP_REFS | 4 | 单向复合参考帧的语法元素数量 |
COMPOUND_TYPES | 2 | 复合类型compound_type 值的数量 |
CFL_JOINT_SIGNS | 8 | CFL alpha 符号cfl_alpha_signs的数量 |
CFL_ALPHABET_SIZE | 16 | cfl_alpha_u 和 cfl_alpha_v 的值的数量 |
COMP_INTER_CONTEXTS | 5 | 复合模式comp_mode的上下文数量 |
COMP_REF_TYPE_CONTEXTS | 5 | 复合参考类型(comp_ref_type)的上下文数量 |
CFL_ALPHA_CONTEXTS | 6 | cfl_alpha_u 和 cfl_alpha_v 的上下文数量 |
INTRA_MODE_CONTEXTS | 5 | 对于 intra_frame_y_mode,左侧和上方上下文的数量 |
COMP_GROUP_IDX_CONTEXTS | 6 | 复合组索引(comp_group_idx)的上下文数量 |
COMPOUND_IDX_CONTEXTS | 6 | 复合索引(compound_idx)的上下文数量 |
INTRA_EDGE_KERNELS | 3 | 帧内边缘滤波器的滤波核数量 |
INTRA_EDGE_TAPS | 5 | 帧内边缘滤波器的核抽头数量 |
FRAME_LF_COUNT | 4 | 环路滤波器强度值的数量 |
MAX_VARTX_DEPTH | 2 | 可变变换树的最大深度 |
TXFM_PARTITION_CONTEXTS | 21 | 变换分割(txfm_split)的上下文数量 |
REF_CAT_LEVEL | 640 | 接近运动矢量的奖励权重 |
MAX_REF_MV_STACK_SIZE | 8 | 栈中运动矢量的最大数量 |
MFMV_STACK_SIZE | 3 | 运动场运动矢量的栈大小 |
MAX_TX_DEPTH | 2 | 变换可以分割的最大次数 |
WEDGE_TYPES | 16 | 楔形掩模处理的方向数量 |
FILTER_BITS | 7 | 用于维纳滤波器系数的比特数 |
WIENER_COEFFS | 3 | 需要读取的维纳滤波器系数的数量 |
SGRPROJ_PARAMS_BITS | 4 | 指定自引导滤波器集合所需的比特数 |
SGRPROJ_PRJ_SUBEXP_K | 4 | 控制自引导增量(deltas)的读取方式 |
SGRPROJ_PRJ_BITS | 7 | 自引导恢复过程中的精度比特数 |
SGRPROJ_RST_BITS | 4 | 在投影之前生成的恢复精度比特数高于源 |
SGRPROJ_MTABLE_BITS | 20 | mtable除法表的精度 |
SGRPROJ_RECIP_BITS | 12 | 除以n表的精度 |
SGRPROJ_SGR_BITS | 8 | 核心自引导恢复的核心内部精度比特数 |
EC_PROB_SHIFT | 6 | 在算术编码过程中减少累积分布函数(CDF)精度的比特数 |
EC_MIN_PROB | 4 | 在算术编码过程中为每个符号分配的最小概率 |
SELECT_SCREEN_CONTENT_TOOLS | 2 | 指示已编码 ‘allow_screen_content_tools’ 语法元素的值 |
SELECT_INTEGER_MV | 2 | 指示已编码 ‘force_integer_mv’ 语法元素的值 |
RESTORATION_TILESIZE_MAX | 256 | 循环恢复瓦片Tile的最大尺寸 |
MAX_FRAME_DISTANCE | 31 | 计算加权预测时的最大距离 |
MAX_OFFSET_WIDTH | 8 | 投影运动矢量的最大水平偏移量 |
MAX_OFFSET_HEIGHT | 0 | 投影运动矢量的最大垂直偏移量 |
WARP_PARAM_REDUCE_BITS | 6 | 用于剪切过程的参数的舍入比特宽度 |
NUM_BASE_LEVELS | 2 | 量化器基级数量 |
COEFF_BASE_RANGE | 12 | 量化器范围在NUM_BASE_LEVELS之上,超过这个范围后激活指数哥伦布(Exp-Golomb)编码过程 |
BR_CDF_SIZE | 4 | coeff_br 的值的数量 |
SIG_COEF_CONTEXTS_EOB | 4 | coeff_base_eob 的上下文数量 |
SIG_COEF_CONTEXTS_2D | 26 | 仅限水平或垂直变换的 coeff_base 的上下文偏移 |
SIG_COEF_CONTEXTS | 42 | coeff_base 的上下文数量 |
SIG_REF_DIFF_OFFSET_NUM | 5 | 在确定 coeff_base 和 coeff_base_eob 的上下文索引时,要使用的最大上下文样本数量 |
SUPERRES_NUM | 8 | 上采样比例的分子 |
SUPERRES_DENOM_MIN | 9 | 上采样比例的最小分母 |
SUPERRES_DENOM_BITS | 3 | 用于指定上采样比率分母的比特数 |
SUPERRES_FILTER_BITS | 6 | 上采样滤镜选择的分数精度比特数 |
SUPERRES_FILTER_SHIFTS | 1 << SUPERRES_FILTER_BITS | 上采样滤波器的相位数量 |
SUPERRES_FILTER_TAPS | 8 | 上采样滤波器的抽头数 |
SUPERRES_FILTER_OFFSET | 3 | 上采样滤波器的采样偏移 |
SUPERRES_SCALE_BITS | 14 | 在上采样中计算位置时的分数位数量 |
SUPERRES_SCALE_MASK | (1 << 14) - 1 | 在上采样中计算位置的掩码 |
SUPERRES_EXTRA_BITS | 8 | SUPERRES_SCALE_BITS 与 SUPERRES_FILTER_BITS 之间的精度差异 |
TXB_SKIP_CONTEXTS | 13 | all_zero 的上下文数量 |
EOB_COEF_CONTEXTS | 9 | eob_extra 的上下文数量 |
DC_SIGN_CONTEXTS | 3 | dc_sign 的上下文数量 |
LEVEL_CONTEXTS | 21 | coeff_br 的上下文数量 |
TX_CLASS_2D | 0 | 在两个方向上执行非恒等变换的变换类型的变换类 |
TX_CLASS_HORIZ | 1 | 仅执行水平非恒等变换的变换类的变换 |
TX_CLASS_VERT | 2 | 仅执行垂直非恒等变换的变换类的变换 |
REFMVS_LIMIT | ( 1 << 12 ) - 1 | 可以保存的最大参考运动矢量分量 |
INTRA_FILTER_SCALE_BITS | 4 | 帧内滤波过程中的缩放位移 |
INTRA_FILTER_MODES | 5 | 帧内滤波的类型数量 |
COEFF_CDF_Q_CTXS | 4 | coeff() 语法结构可选择的上下文类型的数量 |
PRIMARY_REF_NONE | 7 | primary_ref_frame 的值表示没有主要参考帧 |
BUFFER_POOL_MAX_SIZE | 10 | 缓冲池中的帧数 |
原文