原文地址:https://aomediacodec.github.io/av1-spec/av1-spec.pdf
- 没有梯子的下载地址:AV1 Bitstream & Decoding Process Specification
- 摘要:这份文档定义了开放媒体联盟(Alliance for Open Media)AV1视频编解码器的比特流格式和解码过程。
- 规范:此文档规定了开放媒体联盟(Alliance for Open Media)AV1比特流格式和解码过程。
语法结构语义(Syntax structures semantics)
瓦片组OBU语义(Tile group OBU semantics)
通用瓦片组 OBU 语义(General tile group OBU semantics)
- NumTiles:指定帧中的瓦片总数。
- tile_start_and_end_present_flag:指定 tg_start 和 tg_end 是否存在。如果 tg_start 和 tg_end 不存在,则该瓦片组覆盖整个帧。
- 如果 obu_type 等于 OBU_FRAME,则比特流一致性要求 tile_start_and_end_present_flag 的值等于 0。
- tg_start:指定当前瓦片组中第一个瓦片的零基索引。
- 比特流一致性要求 tg_start 的值在调用 tile_group_obu 时等于 TileNum 的值。
- tg_end:指定当前瓦片组中最后一个瓦片的零基索引。
- 比特流一致性要求 tg_end 的值大于或等于 tg_start。
- 比特流一致性要求每帧中最后一个瓦片组的 tg_end 的值等于 NumTiles - 1。
- 注意:这些要求确保在指定解码过程时,所有瓦片组在概念上都是存在的并且按顺序接收。
- frame_end_update_cdf 是一个函数调用,表示帧的 CDF 数组被设置为保存的 CDF。这一过程在第 7.7 节中描述。
- tile_size_minus_1 用于计算 tileSize。
- tileSize:指定下一个编码瓦片的大小(以字节为单位)。
- 注意:该大小包括符号解码器退出过程可能添加的任何填充字节。该大小不包括用于 tile_size_minus_1 或在 tile_size_minus_1 之前发送的语法元素所用的字节。对于瓦片组中的最后一个瓦片,tileSize 是计算得出的,而不是读取的,并包括 OBU 尾部位。
- decode_frame_wrapup 是一个函数调用,表示应调用第 7.4 节中指定的解码帧结束处理过程。
解码瓦片语义(Decode tile semantics)
- clear_left_context 函数调用用于将一些用于确定概率的数组清零。调用此函数时,LeftLevelContext、LeftDcContext 和 LeftSegPredContext 数组会被设置为 0。
- 注意:对于所有行 i 从 0 到 MiRows-1,以及所有平面 plane 从 0 到 2,都必须将 LeftLevelContext[plane][i]、LeftDcContext[plane][i] 和 LeftSegPredContext[i] 设置为 0。
- clear_above_context 函数调用用于将一些用于确定概率的数组清零。调用此函数时,AboveLevelContext、AboveDcContext 和 AboveSegPredContext 数组会被设置为 0。
- 注意:对于所有列 i 从 0 到 MiCols-1,以及所有平面 plane 从 0 到 2,都必须将 AboveLevelContext[plane][i]、AboveDcContext[plane][i] 和 AboveSegPredContext[i] 设置为 0。
- ReadDeltas 指定当前块是否可以读取量化器索引和循环滤波器的delta值。如果整个超块都被跳过,则不读取这些delta值;否则,在超块的第一个块上读取这些delta值。如果 delta_q_present 等于 0,则不读取量化器索引的delta值。如果 delta_lf_present 等于 0,则不读取循环滤波器的delta值。
清除块解码标志语义(Clear block decoded flags semantics)
- BlockDecoded 是一个数组,它在当前超块中为每个平面的每个 4x4 样本块存储一个布尔值,并且在超块的四周各保留一个 4x4 样本块作为边框。除了边框之外,BlockDecoded 中的值为 1 表示对应的 4x4 样本块已经被解码。这些边框在计算超块顶部和左侧边缘处的上右和下左的可用信息时使用。
解码分区语义(Decode partition semantics)
-
partition:指定如何将块进行分区:
-
subSize 变量根据 partition 计算,指示这个块内组件块的大小:
- 这些块的尺寸按宽度、高度顺序给出(例如,BLOCK_8X16 对应一个宽度为8个样本,高度为16个样本的块)。
- 比特流一致性要求,在每次计算 subSize 时,get_plane_residual_size(subSize, 1) 不应该等于 BLOCK_INVALID。
- 注意:此要求防止了 UV 块过高或过宽(即长宽比超出1:4到4:1的范围)。例如,在使用 4:2:2 色度子采样时,亮度分区的大小为 8x32 是不允许的,因为这暗示了一个色度分区的大小为 4x32,导致长宽比为 1:8。
-
split_or_vert 用于计算块的 partition,当由于与帧右侧边缘重叠,只允许分割或垂直分区时。
-
split_or_horz 用于计算块的 partition,当由于与帧底边边缘重叠,只允许分割或水平分区时。
解码块语义(Decode block semantics)
- MiRow:一个变量,用于存储块在垂直方向上的位置,单位是4x4的亮度样本。
- MiCol:一个变量,用于存储块在水平方向上的位置,单位是4x4的亮度样本。
- MiSize:一个变量,用于存储块的大小,其值与变量subSize的含义相同。
- HasChroma:一个变量,用于指定是否为此块编码色度信息。
- AvailU:如果上方块的信息不能在亮度平面上使用,则等于0;如果可以,则等于1。
- AvailL:如果左侧块的信息不能在亮度平面上使用,则等于0;如果可以,则等于1。
- 注意:如果块位于不同的瓦片上,在某些情况下可以使用上方块的信息,但如果块位于左侧,则不能使用。
- AvailUChroma 和 AvailLChroma:与 AvailU 和 AvailL 具有相同的含义,但应用于色度平面。
帧内模式信息语义(Intra frame mode info semantics)
当在一个帧内中编码一个帧内块时这个语法被使用。
-
use_intrabc 等于 1 表示这个块应该使用帧内块复制方式进行编码。use_intrabc 等于 0 表示这个块不应该使用帧内块复制方式进行编码。
-
intra_frame_y_mode 指定了帧内预测滤波的方向:
-
uv_mode 指定了色度的帧内预测模式,其值的解释与intra_frame_y_mode相同,并且多了一个额外的模式UV_CFL_PRED。
- 注意:由于uv_mode语法元素的读取方式,只有在最大块宽度Block_Width[ MiSize ]和最大块高度Block_Height[ MiSize ]都小于或等于32像素时,uv_mode才能被读取为UV_CFL_PRED模式。
帧内段 ID语义(intra segment ID semantics)
- Lossless 是一个变量,如果等于 1,则表示该块使用一种特殊的 4x4 变换进行编码,这种变换专为编码与原始帧位级相同的帧而设计。
读取段 ID 语义(Read segment ID semantics)
- segment_id 指定与当前正在解码的帧内块相关联的段落。它首先从比特流中读取,然后根据预测的段落ID进行后处理。比特流一致性的要求是后处理后的 segment_id 值(即 neg_deinterleave 返回的值)必须在 0 到 LastActiveSegId(包括端点)的范围内。
帧间段 ID语义(Inter segment ID semantics)
- seg_id_predicted 等于 1:指定 segment_id 从分割映射(segmentation map)中获取。seg_id_predicted 等于 0:指定需要解析语法元素 segment_id。
- 注意:即使编码的 segment_id 值等于 predictedSegmentId,也允许 seg_id_predicted 等于 0。
skip 模式语义(Skip mode semantics)
- skip_mode 等于 1:表示这个块将使用一些默认设置(对应于复合预测),因此大部分模式信息被跳过。skip_mode 等于 0:表示模式信息没有被跳过。
skip 语义(skip semantics)
- skip 等于 0:表示这个块可能有一些变换系数需要读取。skip 等于 1:表示这个块没有变换系数。
量化器索引增量语义(Quantizer index delta semantics)
-
delta_q_abs:指定正在解码的量化器索引delta值的绝对值。如果delta_q_abs等于DELTA_Q_SMALL,该值使用delta_q_rem_bits和delta_q_abs_bits进行编码。
-
delta_q_rem_bits 和 delta_q_abs_bits:编码量化器索引delta值的绝对值,量化器索引delta值的绝对值形式如下:
-
delta_q_sign_bit 等于 0 表示量化器索引delta值是正数;delta_q_sign_bit 等于 1 表示量化器索引delta值是负数。
循环滤波器增量语义(Loop filter delta semantics)
-
delta_lf_abs:指定正在解码的循环滤波器delta值的绝对值。如果delta_lf_abs等于DELTA_LF_SMALL,该值使用delta_lf_rem_bits和delta_lf_abs_bits进行编码。
-
delta_lf_rem_bits 和 delta_lf_abs_bits:编码循环滤波器delta值的绝对值,循环滤波器delta值的绝对值形式如下:
-
delta_lf_sign_bit 等于 0 表示循环滤波器delta值是正数;delta_lf_sign_bit 等于 1 表示循环滤波器delta值是负数。
CDEF 参数语义(CDEF params semantics)
- cdef_damping_minus_3:控制去振铃滤波器中的阻尼量。
- cdef_bits:指定用于指定应用哪个CDEF滤波器所需的位数。
- cdef_y_pri_strength 和 cdef_uv_pri_strength:分别指定亮度和色度主滤波器的强度。
- cdef_y_sec_strength 和 cdef_uv_sec_strength:分别指定亮度和色度次级滤波器的强度。
循环恢复参数语义(Loop restoration params semantics)
-
lr_type 用于计算 FrameRestorationType。
-
FrameRestorationType 指定每个平面使用的恢复类型,如下所示:
-
UsesLr 表示是否任何平面使用循环恢复。
-
lr_unit_shift 指定亮度恢复尺寸是否应该减半。
-
lr_unit_extra_shift 指定亮度恢复尺寸是否应该再次减半。
-
lr_uv_shift 仅在4:2:0格式中出现,指定色度尺寸是否应该是亮度尺寸的一半。
-
LoopRestorationSize[plane] 指定当前平面中循环恢复单元的大小,单位为样本。
变换大小语义(TX size semantics)
-
tx_depth 用于计算 TxSize。tx_depth 与 TxSize 相反,即它指定了变换尺寸相对于块的最大可能变换尺寸应该小多少。
-
TxSize 指定用于这个块的变换尺寸:
- 注意:对于跳过的帧内块,需要确定 TxSize,因为 TxSize 控制帧内预测的粒度。
块变换大小语义(Block TX size semantics)
- InterTxSizes 是一个数组,用于保存帧间内的变换尺寸。
- 注意:TxSizes 和 InterTxSizes 包含不同的值。在一个残差块内,TxSizes 中的所有值都将共享相同的值,而 InterTxSizes 可以表示一个残差块内的几种不同的变换尺寸。
可变变换大小语义(Var TX size semantics)
- txfm_split 等于 1:表示应该将块进一步分割成更小的变换尺寸进行处理。txfm_split 等于 0:表示块不应该再被分割,即已经是最小的变换单元。
变换类型语义(Transform type semantics)
- set 指定了变换集合。
变换集合决定了可以使用的变换类型的子集,具体如下表所示。
- inter_tx_type:指定帧间块的变换类型。
- intra_tx_type:指定帧内块的变换类型。
是否是帧间语义(Is inter semantics)
- is_inter 等于 0 表示该块是一个帧内块;is_inter 等于 1 表示该块是一个帧间块。
帧内块模式信息语义(Intra block mode info semantics)
当编码一个帧间帧的帧内块时候,这些语法被使用。
- y_mode:指定亮度帧内预测的方向,使用与intra_frame_y_mode相同的值的解释。
- uv_mode:指定色度帧内预测模式,使用与intra_frame_y_mode的语义相同的值,增加了一个额外的模式UV_CFL_PRED。
- 注意:由于uv_mode语法元素的读取方式,只有当最大块宽度Block_Width[ MiSize ]和最大块高度Block_Height[ MiSize ]都小于或等于32像素时,uv_mode才能被读取为UV_CFL_PRED模式。
帧间块模式信息语义(Inter block mode info semantics)
当编码一个帧间块时,这些语法被使用。
-
compound_mode:指定在使用复合预测时,如何获取帧间预测所使用的运动矢量。在计算YMode时,会在compound_mode的值上加上一个偏移量,如下所示:
- 注意:帧内模式的值从0到13,所以YMode的值从14开始。
-
new_mv 等于0:意味着应该读取一个运动矢量差。
-
zero_mv 等于0:意味着应该将运动矢量设置为帧的默认运动。
-
ref_mv 等于0:意味着应该使用最可能的运动矢量(称为NEAREST),ref_mv 等于1意味着应该使用第二可能的运动矢量(称为NEAR)。
-
interp_filter:指定帧间预测中使用的滤波器类型。允许的值是0到3,与interpolation_filter的解释相同。一个滤波器类型用于垂直滤波方向,另一个用于水平滤波方向。
- 注意:来自未压缩头部的语法元素interpolation_filter可以指定整个帧使用的滤波器类型。如果它设置为SWITCHABLE,那么interp_filter语法元素将从比特流中为每个帧间块读取。
-
RefMvIdx:指定应该使用RefStackMv中的哪个候选项。
-
drl_mode:是发送给运动矢量堆栈中候选项的一位,指示是否应该使用它们。drl_mode 等于0意味着使用当前的idx值。drl_mode 等于1表示继续搜索。DRL代表“动态参考列表”。
过滤帧内模式信息语义(Filter intra mode info semantics)
- use_filter_intra是一个标志位,用于指定是否可以使用帧内滤波。
- filter_intra_mode指定帧内滤波的类型,可以取以下任意值:
参考帧语义(Ref frames semantics)
-
comp_mode 指定是使用单一预测还是复合预测:
-
SINGLE_REFERENCE 表示帧间块仅使用单个参考帧来生成运动补偿预测。
-
COMPOUND_REFERENCE 表示帧间块使用复合模式。有两个参考帧组:
- 组 1:包括LAST_FRAME(前一帧)、LAST2_FRAME(前两帧)、LAST3_FRAME(前三帧)和GOLDEN_FRAME(黄金帧)。
- 组 2:包括BWDREF_FRAME(后向参考帧)、ALTREF2_FRAME(替代参考帧2)和ALTREF_FRAME(替代参考帧)。
- 注意:编码器可以自由地将这些参考帧分配给任何参考帧(通过ref_frame_idx数组)。例如,没有比特流一致性要求规定LAST_FRAME必须表示在输出顺序中出现在当前帧之前的帧。同样,编码器可以将多个参考分配给同一个参考帧。
-
comp_ref_type 用于复合预测,以指定两个参考帧是否来自同一组:
-
uni_comp_ref、uni_comp_ref_p1 和 uni_comp_ref_p2 指定当两个参考帧来自同一组时所使用的参考帧。
-
comp_ref、comp_ref_p1 和 comp_ref_p2 指定当两个参考帧来自不同组时的第一个参考帧。
-
comp_bwdref 和 comp_bwdref_p1 指定当两个参考帧来自不同组时的第二个参考帧。
-
single_ref_p1、single_ref_p2、single_ref_p3、single_ref_p4、single_ref_p5 和 single_ref_p6 指定仅使用单个参考帧时的参考帧。
-
RefFrame[0] 指定用于计算这个块的预测样本所使用的帧:
-
RefFrame[1] 指定在复合预测中使用的额外帧:
- 注意:并非所有 RefFrame[0] 和 RefFrame[1] 的组合都能被编码。
分配运动矢量语义(Assign mv semantics)
-
比特流一致性的要求是,每当assign_mv函数返回时,is_mv_valid(isCompound)函数应该返回1,其中is_mv_valid的定义如下:
- 注意:这个函数的目的是限制运动矢量的最大尺寸,并且,如果use_intrabc等于1,还要额外限制运动矢量,以便从已经解码的瓦片部分获取数据,并且这些部分不要离当前块太近(以便使流水线解码器实现变得可行)。
读取运动模式语义(Read motion mode semantics)
-
use_obmc 等于 1 表示应该使用OBMC(重叠块运动补偿)。use_obmc 等于 0 表示应该使用简单平移。
-
motion_mode 指定要执行的运动补偿类型:
- 注意:当块需要全局运动时,使用SIMPLE运动模式。
读取帧间帧内语义(Read inter intra semantics)
-
interintra 等于 1 表示应该将一个帧间预测与一个帧内预测混合。
-
interintra_mode 指定要使用的帧内预测的类型:
-
wedge_interintra 等于 1 表示应该使用楔形混合。
-
wedge_interintra 等于 0 表示应该使用帧内混合。
-
wedge_index 用于推导出在混合过程中使用的楔形掩膜的方向和偏移量。
读取复合类型语义(Read compound type semantics)
-
comp_group_idx 等于 0 表示应该读取 compound_idx 语法元素。comp_group_idx 等于 1 表示 compound_idx 语法元素不存在。
-
compound_idx 等于 0 表示应该使用基于距离的加权方案进行混合。compound_idx 等于 1 表示应该使用平均方案进行混合。
-
compound_type 指定如何将两种预测混合在一起:
- 注意:COMPOUND_AVERAGE、COMPOUND_INTRA 和 COMPOUND_DISTANCE 不能直接使用复合类型(compound_type)语法元素来表示,但可以从其他语法元素推断出来。
-
wedge_index 用于推导出在混合过程中使用的楔形掩膜的方向和偏移量。
-
wedge_sign 指定楔形混合的符号。
-
mask_type 指定在混合过程中使用的掩膜类型:
运动矢量语义(MV semantics)
-
MvCtx 用于决定运动矢量语法元素使用哪些累积分布函数(CDFs)。
-
mv_joint 指定运动矢量差的哪些分量是非零的:
- 运动矢量差被添加到预测的运动矢量 PredMv 上,以计算最终的运动矢量 Mv。
运动矢量复合语义(MV component semantics)
-
mv_sign 等于 0 表示运动矢量差是正数;mv_sign 等于 1 表示运动矢量差是负数。
-
mv_class 指定了运动矢量差的类别。类别越高,表示运动矢量差代表更大的更新:
-
mv_class0_bit 指定运动矢量差的整数部分。这只在类别 0 运动矢量差中存在。
-
mv_class0_fr 指定运动矢量差的前 2 位小数位。这只在类别 0 运动矢量差中存在。
-
mv_class0_hp 指定运动矢量差的第 3 位小数位。这只在类别 0 运动矢量差中存在。
-
mv_bit 指定运动矢量差整数部分的第 i 位。
-
mv_fr 指定运动矢量差的前 2 位小数位。
-
mv_hp 指定运动矢量差的第 3 位小数位。
计算预测语义(Compute prediction semantics)
- compute_prediction 内部触发间隔和间隔内帧内预测块的预测。然而,帧内预测是在变换块粒度上完成的,因此 transform_block 也调用了 predict_intra。
- predW 和 predH 是变量,包含可用于间隔预测的最小尺寸。(如果并非所有块都使用间隔预测,则这个尺寸可能对色度块有所增加。)
- predict_inter 是一个函数调用,表示间隔预测发生的概念点。当调用这个函数时,会触发第 7.11.3 节中指定的间隔预测过程。
- predict_intra 是一个函数调用,表示帧内预测发生的概念点。当调用这个函数时,会触发第 7.11.2 节中指定的帧内预测过程。
- 注意:predict_inter 和 predict_intra 函数不影响语法解码过程。
- someUseIntra 是一个变量,指示对应于此残差的一些块是否需要帧内预测。
- 注意:色度残差块的尺寸始终至少为 4x4 的宽度和高度。这意味着不需要小于 4 的变换宽度或高度。因此,色度残差实际上可能覆盖几个亮度块。如果这些块中有任何是帧内的,那么整个色度残差块将根据右下角亮度块的模式信息进行单一预测。然而,如果所有组成块都是间隔块,则会触发一个特殊情况,并使用与每个亮度块相对应的较小色度块尺寸进行间隔预测。
残差语义(Residual semantics)
- 残差由多个变换块组成。
- 如果块的宽度或高度超过64个亮度样本,那么残差就被分割成64x64的块。
- 在每个块内,变换块要么是按照光栅顺序发送(如果 use_inter 等于 0 或 LossLess 等于 1),要么是在递归变换树中。
变换块语义(Transform block semantics)
- reconstruct 是一个函数调用,它表示进行逆变换和重建的概念点。当调用此函数时,会触发第 7.12.3 节中指定的重建过程。
- predict_palette 是一个函数调用,它表示进行调色板预测的概念点。当调用此函数时,会触发第 7.11.4 节中指定的调色板预测过程。
- predict_chroma_from_luma 是一个函数调用,它表示从亮度预测色度的概念点。当调用此函数时,会触发第 7.11.5 节中指定的从亮度预测色度的过程。
- MaxLumaW 和 MaxLumaH 是进行从亮度预测色度所需的,它们存储可用于预测的亮度样本的范围。
- LoopfilterTxSizes 是一个数组,存储每个平面和位置的变换大小,以便于在循环滤波中使用。LoopfilterTxSizes[plane][row][col] 存储变换大小,其中 row 和 col 以 4x4 样本为单位。
- 注意:变换大小对于平面 1 和平面 2 总是相等的。
系数语义(Coefficients semantics)
- TxTypes 是一个数组,以 4x4 亮度样本为粒度存储要使用的变换类型。
- 注意:变换类型仅在亮度变换块中读取,色度使用对应亮度块的变换类型。色度块仅使用为当前残差块写入的变换类型。
- Quant 是一个数组,存储当前变换块的量化系数。
- all_zero 等于 1 表示所有系数均为零。
- 注意:变换类型仅在亮度块中存在,并且 all_zero 等于 0。如果亮度块的 all_zero 等于 1,则变换类型设置为 DCT_DCT。
- eob_extra 和 eob_extra_bit 指定最后一个非零系数的位置,用于计算变量 eob。
- eob_pt_16、eob_pt_32、eob_pt_64、eob_pt_128、eob_pt_256、eob_pt_512、eob_pt_1024 是用于计算 eob 的语法元素。
- eob 是一个变量,表示块结束的索引。该索引等于最后一个非零系数的索引加一。
- coeff_base_eob 是一个语法元素,用于计算最后一个非零系数的基准水平。
- 注意:基准水平设置为 coeff_base_eob 加 1。由于该系数已知为非零,因此仅可以通过 coeff_base_eob 编码基准水平 1、2 或 3。
- coeff_base 指定系数的基准水平(该语法元素适用于所有系数,除了最后一个非零系数)。
- 注意:基准水平可以取值 0、1、2 或 3。如果基准水平小于 3,则它包含系数的实际水平。否则,使用语法元素 coeff_br 可选择性地增加该水平。
- dc_sign 指定 DC 系数的符号。
- sign_bit 指定非零 AC 系数的符号。
- coeff_br 指定对系数的增量。
- 注意:每个量化系数可以使用 coeff_br 提供最多 4 个增量。如果编码的增量小于 3,则表示这是最后一个增量。
- golomb_length_bit 用于计算编码系数所需的额外位数。如果 length 等于 20,则比特流一致性的要求是 golomb_length_bit 等于 1。
- golomb_data_bit 指定其中一个额外位的值。
- AboveLevelContext 和 LeftLevelContext 是数组,以 4 样本为粒度存储系数水平的累积和。
- AboveDcContext 和 LeftDcContext 是数组,以 4 样本为粒度存储 2 位信号的 DC 系数符号(零被视为一个单独的符号)。
帧内角度信息语义(Intra angle info semantics)
- angle_delta_y 指定了应用于亮度平面中由预测模式指定的帧内预测角度的偏移量,该偏移量经过 MAX_ANGLE_DELTA 的偏置,以便编码为正值。
- angle_delta_uv 指定了应用于色度平面中由预测模式指定的帧内预测角度的偏移量,该偏移量同样经过 MAX_ANGLE_DELTA 的偏置,以便编码为正值。
- AngleDeltaY 是通过从 angle_delta_y 中去除 MAX_ANGLE_DELTA 偏移量计算得出的最终亮度角度偏移值,该值可以是正值或负值。
- AngleDeltaUV 是通过从 angle_delta_uv 中去除 MAX_ANGLE_DELTA 偏移量计算得出的最终色度角度偏移值,该值也可以是正值或负值。
读取 CFL alphas 语义(Read CFL alphas semantics)
-
cfl_alpha_signs 包含了 U 和 V 的 alpha 值的符号,这两个符号被打包到一个单独的语法元素中,共有 8 种可能的值。(两个零符号的组合被禁止,因为它与 DC 帧内预测冗余。)
-
signU 包含了 U 分量 alpha 值的符号。
-
signV 包含了 V 分量 alpha 值的符号,其解释与 signU 相同。在视频编码中,V 分量通常指的是色度红色差(Cr)的预测值。
-
cfl_alpha_u 包含了 U 分量的 alpha 值的绝对值减一。
-
cfl_alpha_v 包含了 V 分量的 alpha 值的绝对值减一。
-
CflAlphaU 包含了 U 分量的 alpha 分量带符号的值。
-
CflAlphaV 包含了 V 分量的 alpha 分量带符号的值。
Palette模式信息语义(Palette mode info semantics)
- has_palette_y 是一个布尔值,指定 Y 平面是否编码了调色板。
- has_palette_uv 是一个布尔值,指定 UV 平面是否编码了调色板。
- palette_size_y_minus_2 用于计算 PaletteSizeY。
- PaletteSizeY 是一个变量,保存 Y 平面调色板的大小。
- palette_size_uv_minus_2 用于计算 PaletteSizeUV。
- PaletteSizeUV 是一个变量,保存 UV 平面调色板的大小。
- use_palette_color_cache_y 如果等于 1,表示对于亮度调色板中的特定调色板条目,应使用缓存的条目。
- use_palette_color_cache_u 如果等于 1,表示对于 U 色度调色板中的特定调色板条目,应使用缓存的条目。
- palette_colors_y 是一个数组,保存 Y 平面调色板颜色。
- palette_colors_u 是一个数组,保存 U 平面调色板颜色。
- palette_colors_v 是一个数组,保存 V 平面调色板颜色。
- delta_encode_palette_colors_v 如果等于 1,表示 V 色度调色板使用增量编码。
- palette_num_extra_bits_y 用于计算存储亮度调色板每个调色板增量值所需的位数。
- palette_num_extra_bits_u 用于计算存储 U 色度调色板每个调色板增量值所需的位数。
- palette_num_extra_bits_v 用于计算存储 V 色度调色板每个调色板增量值所需的位数。
- palette_delta_y 是亮度调色板的增量值。
- palette_delta_u 是 U 色度调色板的增量值。
- palette_delta_v 是 V 色度调色板的增量值。
- 注意:亮度和 U 增量值相对于同一平面中前一个调色板条目给出正偏移。V 增量值相对于 U 调色板条目给出有符号偏移。
- palette_delta_sign_bit_v 如果等于 1,表示解码的 V 色度调色板增量值应被取反。
调色板标记语义(Palette tokens semantics)
- color_index_map_y 保存了块的 Y 平面上左样本在 palette_colors_y 中的索引。
- color_index_map_uv 保存了块的 UV 平面上左样本在 palette_colors_u 和 palette_colors_v 中的索引。
- palette_color_idx_y 保存了块的 Y 平面上的样本在 ColorOrder 中的索引。
- palette_color_idx_uv 保存了块的 UV 平面上的样本在 ColorOrder 中的索引。
调色板颜色上下文语义(Palette color context semantics)
- ColorOrder 是一个数组,它保存了从编码索引到调色板的映射。ColorOrder 根据当前块周围颜色的出现频率进行排序,并且通过与当前块的接近程度加权。
- ColorContextHash 是一个变量,它源自当前块周围颜色分布的统计信息,用于确定用于解码 palette_color_idx_y(亮度调色板颜色索引)和 palette_color_idx_uv(色度调色板颜色索引)的概率上下文。
读取CDEF语义(Read CDEF semantics)
- cdef_idx 指定应为特定的 64x64 块使用哪些 CDEF 滤波参数。值为 -1 表示该块的 CDEF 被禁用。
读取循环恢复单元语义(Read loop restoration unit semantics)
- use_wiener 指定是否应该使用维纳滤波器(Wiener filter)。
- use_sgrproj 指定是否应该使用自引导滤波器(self guided filter)。
- restoration_type 指定应该使用哪种恢复滤波器,其解释与 FrameRestorationType 相同。
- lr_sgr_set 指定用于自引导滤波器的参数集。
- subexp_more_bools 等于 0 表示参数在范围 mk 到 mk+a-1 内。subexp_more_bools 等于 1 表示参数大于 mk+a-1。
- subexp_unif_bools 指定参数减去 mk 的值。
- subexp_bools 指定参数减去 mk 的值。
瓦片列表OBU语义(Tile list OBU semantics)
通用瓦片列表OBU语义(General tile list OBU semantics)
- output_frame_width_in_tiles_minus_1 加一后是输出帧的宽度,单位是瓦片单位。
- output_frame_height_in_tiles_minus_1 加一后是输出帧的高度,单位是瓦片单位。
- tile_count_minus_1 加一后是列表中 tile_list_entry 的数量。比特流一致性的要求是 tile_count_minus_1 必须小于或等于 511。
瓦片列表条目语义(Tile list entry semantics)
- anchor_frame_idx 是一个索引,指向 AnchorFrames 数组中用于瓦片预测的帧。AnchorFrames 数组由外部方式提供,并且可能在每个瓦片列表 OBU 中发生变化。创建 AnchorFrames 数组的过程不在本规范的范围内。 比特流一致性的要求是 anchor_frame_idx 必须小于或等于 127。
- anchor_tile_row 是瓦片在它所属帧中的行坐标,以瓦片单位表示。 比特流一致性的要求是 anchor_tile_row 必须小于 TileRows。
- anchor_tile_col 是瓦片在它所属帧中的列坐标,以瓦片单位表示。 比特流一致性的要求是 anchor_tile_col 必须小于 TileCols。
- tile_data_size_minus_1 加一后是编码瓦片数据 coded_tile_data 的大小,单位是字节。
- coded_tile_data 是编码瓦片的 tile_data_size_minus_1 + 1 个字节。