AV1 Bitstream Decoding Process Specification--[9]:语法结构语义-5

news2024/9/24 21:33:04

原文地址: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)

  1. NumTiles:指定帧中的瓦片总数。
  2. tile_start_and_end_present_flag:指定 tg_start 和 tg_end 是否存在。如果 tg_start 和 tg_end 不存在,则该瓦片组覆盖整个帧。
  3. 如果 obu_type 等于 OBU_FRAME,则比特流一致性要求 tile_start_and_end_present_flag 的值等于 0。
  4. tg_start:指定当前瓦片组中第一个瓦片的零基索引。
  5. 比特流一致性要求 tg_start 的值在调用 tile_group_obu 时等于 TileNum 的值。
  6. tg_end:指定当前瓦片组中最后一个瓦片的零基索引。
  7. 比特流一致性要求 tg_end 的值大于或等于 tg_start。
  8. 比特流一致性要求每帧中最后一个瓦片组的 tg_end 的值等于 NumTiles - 1。
    • 注意:这些要求确保在指定解码过程时,所有瓦片组在概念上都是存在的并且按顺序接收。
  9. frame_end_update_cdf 是一个函数调用,表示帧的 CDF 数组被设置为保存的 CDF。这一过程在第 7.7 节中描述。
  10. tile_size_minus_1 用于计算 tileSize。
  11. tileSize:指定下一个编码瓦片的大小(以字节为单位)。
    • 注意:该大小包括符号解码器退出过程可能添加的任何填充字节。该大小不包括用于 tile_size_minus_1 或在 tile_size_minus_1 之前发送的语法元素所用的字节。对于瓦片组中的最后一个瓦片,tileSize 是计算得出的,而不是读取的,并包括 OBU 尾部位。
  12. decode_frame_wrapup 是一个函数调用,表示应调用第 7.4 节中指定的解码帧结束处理过程。

解码瓦片语义(Decode tile semantics)

  1. clear_left_context 函数调用用于将一些用于确定概率的数组清零。调用此函数时,LeftLevelContext、LeftDcContext 和 LeftSegPredContext 数组会被设置为 0。
    • 注意:对于所有行 i 从 0 到 MiRows-1,以及所有平面 plane 从 0 到 2,都必须将 LeftLevelContext[plane][i]、LeftDcContext[plane][i] 和 LeftSegPredContext[i] 设置为 0。
  2. clear_above_context 函数调用用于将一些用于确定概率的数组清零。调用此函数时,AboveLevelContext、AboveDcContext 和 AboveSegPredContext 数组会被设置为 0。
    • 注意:对于所有列 i 从 0 到 MiCols-1,以及所有平面 plane 从 0 到 2,都必须将 AboveLevelContext[plane][i]、AboveDcContext[plane][i] 和 AboveSegPredContext[i] 设置为 0。
  3. ReadDeltas 指定当前块是否可以读取量化器索引和循环滤波器的delta值。如果整个超块都被跳过,则不读取这些delta值;否则,在超块的第一个块上读取这些delta值。如果 delta_q_present 等于 0,则不读取量化器索引的delta值。如果 delta_lf_present 等于 0,则不读取循环滤波器的delta值。

清除块解码标志语义(Clear block decoded flags semantics)

  1. BlockDecoded 是一个数组,它在当前超块中为每个平面的每个 4x4 样本块存储一个布尔值,并且在超块的四周各保留一个 4x4 样本块作为边框。除了边框之外,BlockDecoded 中的值为 1 表示对应的 4x4 样本块已经被解码。这些边框在计算超块顶部和左侧边缘处的上右和下左的可用信息时使用。
解码分区语义(Decode partition semantics)
  1. partition:指定如何将块进行分区:
    在这里插入图片描述

  2. 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。
  3. split_or_vert 用于计算块的 partition,当由于与帧右侧边缘重叠,只允许分割或垂直分区时。

  4. split_or_horz 用于计算块的 partition,当由于与帧底边边缘重叠,只允许分割或水平分区时。

解码块语义(Decode block semantics)

  1. MiRow:一个变量,用于存储块在垂直方向上的位置,单位是4x4的亮度样本。
  2. MiCol:一个变量,用于存储块在水平方向上的位置,单位是4x4的亮度样本。
  3. MiSize:一个变量,用于存储块的大小,其值与变量subSize的含义相同。
  4. HasChroma:一个变量,用于指定是否为此块编码色度信息。
  5. AvailU:如果上方块的信息不能在亮度平面上使用,则等于0;如果可以,则等于1。
  6. AvailL:如果左侧块的信息不能在亮度平面上使用,则等于0;如果可以,则等于1。
    • 注意:如果块位于不同的瓦片上,在某些情况下可以使用上方块的信息,但如果块位于左侧,则不能使用。
  7. AvailUChroma 和 AvailLChroma:与 AvailU 和 AvailL 具有相同的含义,但应用于色度平面。

帧内模式信息语义(Intra frame mode info semantics)

当在一个帧内中编码一个帧内块时这个语法被使用。

  1. use_intrabc 等于 1 表示这个块应该使用帧内块复制方式进行编码。use_intrabc 等于 0 表示这个块不应该使用帧内块复制方式进行编码。

  2. intra_frame_y_mode 指定了帧内预测滤波的方向:
    在这里插入图片描述

  3. 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)

  1. Lossless 是一个变量,如果等于 1,则表示该块使用一种特殊的 4x4 变换进行编码,这种变换专为编码与原始帧位级相同的帧而设计。

读取段 ID 语义(Read segment ID semantics)

  1. segment_id 指定与当前正在解码的帧内块相关联的段落。它首先从比特流中读取,然后根据预测的段落ID进行后处理。比特流一致性的要求是后处理后的 segment_id 值(即 neg_deinterleave 返回的值)必须在 0 到 LastActiveSegId(包括端点)的范围内。

帧间段 ID语义(Inter segment ID semantics)

  1. 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)

  1. skip_mode 等于 1:表示这个块将使用一些默认设置(对应于复合预测),因此大部分模式信息被跳过。skip_mode 等于 0:表示模式信息没有被跳过。

skip 语义(skip semantics)

  1. skip 等于 0:表示这个块可能有一些变换系数需要读取。skip 等于 1:表示这个块没有变换系数。

量化器索引增量语义(Quantizer index delta semantics)

  1. delta_q_abs:指定正在解码的量化器索引delta值的绝对值。如果delta_q_abs等于DELTA_Q_SMALL,该值使用delta_q_rem_bits和delta_q_abs_bits进行编码。

  2. delta_q_rem_bits 和 delta_q_abs_bits:编码量化器索引delta值的绝对值,量化器索引delta值的绝对值形式如下:
    在这里插入图片描述

  3. delta_q_sign_bit 等于 0 表示量化器索引delta值是正数;delta_q_sign_bit 等于 1 表示量化器索引delta值是负数。

循环滤波器增量语义(Loop filter delta semantics)

  1. delta_lf_abs:指定正在解码的循环滤波器delta值的绝对值。如果delta_lf_abs等于DELTA_LF_SMALL,该值使用delta_lf_rem_bits和delta_lf_abs_bits进行编码。

  2. delta_lf_rem_bits 和 delta_lf_abs_bits:编码循环滤波器delta值的绝对值,循环滤波器delta值的绝对值形式如下:
    在这里插入图片描述

  3. delta_lf_sign_bit 等于 0 表示循环滤波器delta值是正数;delta_lf_sign_bit 等于 1 表示循环滤波器delta值是负数。

CDEF 参数语义(CDEF params semantics)

  1. cdef_damping_minus_3:控制去振铃滤波器中的阻尼量。
  2. cdef_bits:指定用于指定应用哪个CDEF滤波器所需的位数。
  3. cdef_y_pri_strength 和 cdef_uv_pri_strength:分别指定亮度和色度主滤波器的强度。
  4. cdef_y_sec_strength 和 cdef_uv_sec_strength:分别指定亮度和色度次级滤波器的强度。
循环恢复参数语义(Loop restoration params semantics)
  1. lr_type 用于计算 FrameRestorationType。

  2. FrameRestorationType 指定每个平面使用的恢复类型,如下所示:
    在这里插入图片描述

  3. UsesLr 表示是否任何平面使用循环恢复。

  4. lr_unit_shift 指定亮度恢复尺寸是否应该减半。

  5. lr_unit_extra_shift 指定亮度恢复尺寸是否应该再次减半。

  6. lr_uv_shift 仅在4:2:0格式中出现,指定色度尺寸是否应该是亮度尺寸的一半。

  7. LoopRestorationSize[plane] 指定当前平面中循环恢复单元的大小,单位为样本。

变换大小语义(TX size semantics)

  1. tx_depth 用于计算 TxSize。tx_depth 与 TxSize 相反,即它指定了变换尺寸相对于块的最大可能变换尺寸应该小多少。

  2. TxSize 指定用于这个块的变换尺寸:
    在这里插入图片描述

    • 注意:对于跳过的帧内块,需要确定 TxSize,因为 TxSize 控制帧内预测的粒度。
块变换大小语义(Block TX size semantics)
  1. InterTxSizes 是一个数组,用于保存帧间内的变换尺寸。
    • 注意:TxSizes 和 InterTxSizes 包含不同的值。在一个残差块内,TxSizes 中的所有值都将共享相同的值,而 InterTxSizes 可以表示一个残差块内的几种不同的变换尺寸。

可变变换大小语义(Var TX size semantics)

  1. txfm_split 等于 1:表示应该将块进一步分割成更小的变换尺寸进行处理。txfm_split 等于 0:表示块不应该再被分割,即已经是最小的变换单元。

变换类型语义(Transform type semantics)

  1. set 指定了变换集合。
    在这里插入图片描述

变换集合决定了可以使用的变换类型的子集,具体如下表所示。
在这里插入图片描述

  1. inter_tx_type:指定帧间块的变换类型。
  2. intra_tx_type:指定帧内块的变换类型。

是否是帧间语义(Is inter semantics)

  1. is_inter 等于 0 表示该块是一个帧内块;is_inter 等于 1 表示该块是一个帧间块。

帧内块模式信息语义(Intra block mode info semantics)

当编码一个帧间帧的帧内块时候,这些语法被使用。

  1. y_mode:指定亮度帧内预测的方向,使用与intra_frame_y_mode相同的值的解释。
  2. uv_mode:指定色度帧内预测模式,使用与intra_frame_y_mode的语义相同的值,增加了一个额外的模式UV_CFL_PRED。
  3. 注意:由于uv_mode语法元素的读取方式,只有当最大块宽度Block_Width[ MiSize ]和最大块高度Block_Height[ MiSize ]都小于或等于32像素时,uv_mode才能被读取为UV_CFL_PRED模式。
帧间块模式信息语义(Inter block mode info semantics)

当编码一个帧间块时,这些语法被使用。

  1. compound_mode:指定在使用复合预测时,如何获取帧间预测所使用的运动矢量。在计算YMode时,会在compound_mode的值上加上一个偏移量,如下所示:
    在这里插入图片描述

    • 注意:帧内模式的值从0到13,所以YMode的值从14开始。
  2. new_mv 等于0:意味着应该读取一个运动矢量差。

  3. zero_mv 等于0:意味着应该将运动矢量设置为帧的默认运动。

  4. ref_mv 等于0:意味着应该使用最可能的运动矢量(称为NEAREST),ref_mv 等于1意味着应该使用第二可能的运动矢量(称为NEAR)。

  5. interp_filter:指定帧间预测中使用的滤波器类型。允许的值是0到3,与interpolation_filter的解释相同。一个滤波器类型用于垂直滤波方向,另一个用于水平滤波方向。

    • 注意:来自未压缩头部的语法元素interpolation_filter可以指定整个帧使用的滤波器类型。如果它设置为SWITCHABLE,那么interp_filter语法元素将从比特流中为每个帧间块读取。
  6. RefMvIdx:指定应该使用RefStackMv中的哪个候选项。

  7. drl_mode:是发送给运动矢量堆栈中候选项的一位,指示是否应该使用它们。drl_mode 等于0意味着使用当前的idx值。drl_mode 等于1表示继续搜索。DRL代表“动态参考列表”。

过滤帧内模式信息语义(Filter intra mode info semantics)

  1. use_filter_intra是一个标志位,用于指定是否可以使用帧内滤波。
  2. filter_intra_mode指定帧内滤波的类型,可以取以下任意值:
    在这里插入图片描述
参考帧语义(Ref frames semantics)
  1. comp_mode 指定是使用单一预测还是复合预测:
    在这里插入图片描述

  2. SINGLE_REFERENCE 表示帧间块仅使用单个参考帧来生成运动补偿预测。

  3. COMPOUND_REFERENCE 表示帧间块使用复合模式。有两个参考帧组:

    • 组 1:包括LAST_FRAME(前一帧)、LAST2_FRAME(前两帧)、LAST3_FRAME(前三帧)和GOLDEN_FRAME(黄金帧)。
    • 组 2:包括BWDREF_FRAME(后向参考帧)、ALTREF2_FRAME(替代参考帧2)和ALTREF_FRAME(替代参考帧)。
    • 注意:编码器可以自由地将这些参考帧分配给任何参考帧(通过ref_frame_idx数组)。例如,没有比特流一致性要求规定LAST_FRAME必须表示在输出顺序中出现在当前帧之前的帧。同样,编码器可以将多个参考分配给同一个参考帧。
  4. comp_ref_type 用于复合预测,以指定两个参考帧是否来自同一组:
    在这里插入图片描述

  5. uni_comp_ref、uni_comp_ref_p1 和 uni_comp_ref_p2 指定当两个参考帧来自同一组时所使用的参考帧。

  6. comp_ref、comp_ref_p1 和 comp_ref_p2 指定当两个参考帧来自不同组时的第一个参考帧。

  7. comp_bwdref 和 comp_bwdref_p1 指定当两个参考帧来自不同组时的第二个参考帧。

  8. single_ref_p1、single_ref_p2、single_ref_p3、single_ref_p4、single_ref_p5 和 single_ref_p6 指定仅使用单个参考帧时的参考帧。

  9. RefFrame[0] 指定用于计算这个块的预测样本所使用的帧:
    在这里插入图片描述

  10. RefFrame[1] 指定在复合预测中使用的额外帧:
    在这里插入图片描述

    • 注意:并非所有 RefFrame[0] 和 RefFrame[1] 的组合都能被编码。

分配运动矢量语义(Assign mv semantics)

  1. 比特流一致性的要求是,每当assign_mv函数返回时,is_mv_valid(isCompound)函数应该返回1,其中is_mv_valid的定义如下:
    在这里插入图片描述

    • 注意:这个函数的目的是限制运动矢量的最大尺寸,并且,如果use_intrabc等于1,还要额外限制运动矢量,以便从已经解码的瓦片部分获取数据,并且这些部分不要离当前块太近(以便使流水线解码器实现变得可行)。

读取运动模式语义(Read motion mode semantics)

  1. use_obmc 等于 1 表示应该使用OBMC(重叠块运动补偿)。use_obmc 等于 0 表示应该使用简单平移。

  2. motion_mode 指定要执行的运动补偿类型:
    在这里插入图片描述

    • 注意:当块需要全局运动时,使用SIMPLE运动模式。

读取帧间帧内语义(Read inter intra semantics)

  1. interintra 等于 1 表示应该将一个帧间预测与一个帧内预测混合。

  2. interintra_mode 指定要使用的帧内预测的类型:
    在这里插入图片描述

  3. wedge_interintra 等于 1 表示应该使用楔形混合。

  4. wedge_interintra 等于 0 表示应该使用帧内混合。

  5. wedge_index 用于推导出在混合过程中使用的楔形掩膜的方向和偏移量。

读取复合类型语义(Read compound type semantics)

  1. comp_group_idx 等于 0 表示应该读取 compound_idx 语法元素。comp_group_idx 等于 1 表示 compound_idx 语法元素不存在。

  2. compound_idx 等于 0 表示应该使用基于距离的加权方案进行混合。compound_idx 等于 1 表示应该使用平均方案进行混合。

  3. compound_type 指定如何将两种预测混合在一起:
    在这里插入图片描述

    • 注意:COMPOUND_AVERAGE、COMPOUND_INTRA 和 COMPOUND_DISTANCE 不能直接使用复合类型(compound_type)语法元素来表示,但可以从其他语法元素推断出来。
  4. wedge_index 用于推导出在混合过程中使用的楔形掩膜的方向和偏移量。

  5. wedge_sign 指定楔形混合的符号。

  6. mask_type 指定在混合过程中使用的掩膜类型:
    在这里插入图片描述

运动矢量语义(MV semantics)

  1. MvCtx 用于决定运动矢量语法元素使用哪些累积分布函数(CDFs)。

  2. mv_joint 指定运动矢量差的哪些分量是非零的:
    在这里插入图片描述

    • 运动矢量差被添加到预测的运动矢量 PredMv 上,以计算最终的运动矢量 Mv。

运动矢量复合语义(MV component semantics)

  1. mv_sign 等于 0 表示运动矢量差是正数;mv_sign 等于 1 表示运动矢量差是负数。

  2. mv_class 指定了运动矢量差的类别。类别越高,表示运动矢量差代表更大的更新:
    在这里插入图片描述

  3. mv_class0_bit 指定运动矢量差的整数部分。这只在类别 0 运动矢量差中存在。

  4. mv_class0_fr 指定运动矢量差的前 2 位小数位。这只在类别 0 运动矢量差中存在。

  5. mv_class0_hp 指定运动矢量差的第 3 位小数位。这只在类别 0 运动矢量差中存在。

  6. mv_bit 指定运动矢量差整数部分的第 i 位。

  7. mv_fr 指定运动矢量差的前 2 位小数位。

  8. mv_hp 指定运动矢量差的第 3 位小数位。

计算预测语义(Compute prediction semantics)

  1. compute_prediction 内部触发间隔和间隔内帧内预测块的预测。然而,帧内预测是在变换块粒度上完成的,因此 transform_block 也调用了 predict_intra。
  2. predW 和 predH 是变量,包含可用于间隔预测的最小尺寸。(如果并非所有块都使用间隔预测,则这个尺寸可能对色度块有所增加。)
  3. predict_inter 是一个函数调用,表示间隔预测发生的概念点。当调用这个函数时,会触发第 7.11.3 节中指定的间隔预测过程。
  4. predict_intra 是一个函数调用,表示帧内预测发生的概念点。当调用这个函数时,会触发第 7.11.2 节中指定的帧内预测过程。
    • 注意:predict_inter 和 predict_intra 函数不影响语法解码过程。
  5. someUseIntra 是一个变量,指示对应于此残差的一些块是否需要帧内预测。
    • 注意:色度残差块的尺寸始终至少为 4x4 的宽度和高度。这意味着不需要小于 4 的变换宽度或高度。因此,色度残差实际上可能覆盖几个亮度块。如果这些块中有任何是帧内的,那么整个色度残差块将根据右下角亮度块的模式信息进行单一预测。然而,如果所有组成块都是间隔块,则会触发一个特殊情况,并使用与每个亮度块相对应的较小色度块尺寸进行间隔预测。

残差语义(Residual semantics)

  1. 残差由多个变换块组成。
  2. 如果块的宽度或高度超过64个亮度样本,那么残差就被分割成64x64的块。
  3. 在每个块内,变换块要么是按照光栅顺序发送(如果 use_inter 等于 0 或 LossLess 等于 1),要么是在递归变换树中。

变换块语义(Transform block semantics)

  1. reconstruct 是一个函数调用,它表示进行逆变换和重建的概念点。当调用此函数时,会触发第 7.12.3 节中指定的重建过程。
  2. predict_palette 是一个函数调用,它表示进行调色板预测的概念点。当调用此函数时,会触发第 7.11.4 节中指定的调色板预测过程。
  3. predict_chroma_from_luma 是一个函数调用,它表示从亮度预测色度的概念点。当调用此函数时,会触发第 7.11.5 节中指定的从亮度预测色度的过程。
  4. MaxLumaW 和 MaxLumaH 是进行从亮度预测色度所需的,它们存储可用于预测的亮度样本的范围。
  5. LoopfilterTxSizes 是一个数组,存储每个平面和位置的变换大小,以便于在循环滤波中使用。LoopfilterTxSizes[plane][row][col] 存储变换大小,其中 row 和 col 以 4x4 样本为单位。
    • 注意:变换大小对于平面 1 和平面 2 总是相等的。

系数语义(Coefficients semantics)

  1. TxTypes 是一个数组,以 4x4 亮度样本为粒度存储要使用的变换类型。
    • 注意:变换类型仅在亮度变换块中读取,色度使用对应亮度块的变换类型。色度块仅使用为当前残差块写入的变换类型。
  2. Quant 是一个数组,存储当前变换块的量化系数。
  3. all_zero 等于 1 表示所有系数均为零。
    • 注意:变换类型仅在亮度块中存在,并且 all_zero 等于 0。如果亮度块的 all_zero 等于 1,则变换类型设置为 DCT_DCT。
  4. eob_extra 和 eob_extra_bit 指定最后一个非零系数的位置,用于计算变量 eob。
  5. eob_pt_16、eob_pt_32、eob_pt_64、eob_pt_128、eob_pt_256、eob_pt_512、eob_pt_1024 是用于计算 eob 的语法元素。
  6. eob 是一个变量,表示块结束的索引。该索引等于最后一个非零系数的索引加一。
  7. coeff_base_eob 是一个语法元素,用于计算最后一个非零系数的基准水平。
    • 注意:基准水平设置为 coeff_base_eob 加 1。由于该系数已知为非零,因此仅可以通过 coeff_base_eob 编码基准水平 1、2 或 3。
  8. coeff_base 指定系数的基准水平(该语法元素适用于所有系数,除了最后一个非零系数)。
    • 注意:基准水平可以取值 0、1、2 或 3。如果基准水平小于 3,则它包含系数的实际水平。否则,使用语法元素 coeff_br 可选择性地增加该水平。
  9. dc_sign 指定 DC 系数的符号。
  10. sign_bit 指定非零 AC 系数的符号。
  11. coeff_br 指定对系数的增量。
    • 注意:每个量化系数可以使用 coeff_br 提供最多 4 个增量。如果编码的增量小于 3,则表示这是最后一个增量。
  12. golomb_length_bit 用于计算编码系数所需的额外位数。如果 length 等于 20,则比特流一致性的要求是 golomb_length_bit 等于 1。
  13. golomb_data_bit 指定其中一个额外位的值。
  14. AboveLevelContext 和 LeftLevelContext 是数组,以 4 样本为粒度存储系数水平的累积和。
  15. AboveDcContext 和 LeftDcContext 是数组,以 4 样本为粒度存储 2 位信号的 DC 系数符号(零被视为一个单独的符号)。

帧内角度信息语义(Intra angle info semantics)

  1. angle_delta_y 指定了应用于亮度平面中由预测模式指定的帧内预测角度的偏移量,该偏移量经过 MAX_ANGLE_DELTA 的偏置,以便编码为正值。
  2. angle_delta_uv 指定了应用于色度平面中由预测模式指定的帧内预测角度的偏移量,该偏移量同样经过 MAX_ANGLE_DELTA 的偏置,以便编码为正值。
  3. AngleDeltaY 是通过从 angle_delta_y 中去除 MAX_ANGLE_DELTA 偏移量计算得出的最终亮度角度偏移值,该值可以是正值或负值。
  4. AngleDeltaUV 是通过从 angle_delta_uv 中去除 MAX_ANGLE_DELTA 偏移量计算得出的最终色度角度偏移值,该值也可以是正值或负值。

读取 CFL alphas 语义(Read CFL alphas semantics)

  1. cfl_alpha_signs 包含了 U 和 V 的 alpha 值的符号,这两个符号被打包到一个单独的语法元素中,共有 8 种可能的值。(两个零符号的组合被禁止,因为它与 DC 帧内预测冗余。)
    在这里插入图片描述

  2. signU 包含了 U 分量 alpha 值的符号。
    在这里插入图片描述

  3. signV 包含了 V 分量 alpha 值的符号,其解释与 signU 相同。在视频编码中,V 分量通常指的是色度红色差(Cr)的预测值。

  4. cfl_alpha_u 包含了 U 分量的 alpha 值的绝对值减一。

  5. cfl_alpha_v 包含了 V 分量的 alpha 值的绝对值减一。

  6. CflAlphaU 包含了 U 分量的 alpha 分量带符号的值。

  7. CflAlphaV 包含了 V 分量的 alpha 分量带符号的值。

Palette模式信息语义(Palette mode info semantics)

  1. has_palette_y 是一个布尔值,指定 Y 平面是否编码了调色板。
  2. has_palette_uv 是一个布尔值,指定 UV 平面是否编码了调色板。
  3. palette_size_y_minus_2 用于计算 PaletteSizeY。
  4. PaletteSizeY 是一个变量,保存 Y 平面调色板的大小。
  5. palette_size_uv_minus_2 用于计算 PaletteSizeUV。
  6. PaletteSizeUV 是一个变量,保存 UV 平面调色板的大小。
  7. use_palette_color_cache_y 如果等于 1,表示对于亮度调色板中的特定调色板条目,应使用缓存的条目。
  8. use_palette_color_cache_u 如果等于 1,表示对于 U 色度调色板中的特定调色板条目,应使用缓存的条目。
  9. palette_colors_y 是一个数组,保存 Y 平面调色板颜色。
  10. palette_colors_u 是一个数组,保存 U 平面调色板颜色。
  11. palette_colors_v 是一个数组,保存 V 平面调色板颜色。
  12. delta_encode_palette_colors_v 如果等于 1,表示 V 色度调色板使用增量编码。
  13. palette_num_extra_bits_y 用于计算存储亮度调色板每个调色板增量值所需的位数。
  14. palette_num_extra_bits_u 用于计算存储 U 色度调色板每个调色板增量值所需的位数。
  15. palette_num_extra_bits_v 用于计算存储 V 色度调色板每个调色板增量值所需的位数。
  16. palette_delta_y 是亮度调色板的增量值。
  17. palette_delta_u 是 U 色度调色板的增量值。
  18. palette_delta_v 是 V 色度调色板的增量值。
    • 注意:亮度和 U 增量值相对于同一平面中前一个调色板条目给出正偏移。V 增量值相对于 U 调色板条目给出有符号偏移。
  19. palette_delta_sign_bit_v 如果等于 1,表示解码的 V 色度调色板增量值应被取反。

调色板标记语义(Palette tokens semantics)

  1. color_index_map_y 保存了块的 Y 平面上左样本在 palette_colors_y 中的索引。
  2. color_index_map_uv 保存了块的 UV 平面上左样本在 palette_colors_u 和 palette_colors_v 中的索引。
  3. palette_color_idx_y 保存了块的 Y 平面上的样本在 ColorOrder 中的索引。
  4. palette_color_idx_uv 保存了块的 UV 平面上的样本在 ColorOrder 中的索引。

调色板颜色上下文语义(Palette color context semantics)

  1. ColorOrder 是一个数组,它保存了从编码索引到调色板的映射。ColorOrder 根据当前块周围颜色的出现频率进行排序,并且通过与当前块的接近程度加权。
  2. ColorContextHash 是一个变量,它源自当前块周围颜色分布的统计信息,用于确定用于解码 palette_color_idx_y(亮度调色板颜色索引)和 palette_color_idx_uv(色度调色板颜色索引)的概率上下文。

读取CDEF语义(Read CDEF semantics)

  1. cdef_idx 指定应为特定的 64x64 块使用哪些 CDEF 滤波参数。值为 -1 表示该块的 CDEF 被禁用。

读取循环恢复单元语义(Read loop restoration unit semantics)

  1. use_wiener 指定是否应该使用维纳滤波器(Wiener filter)。
  2. use_sgrproj 指定是否应该使用自引导滤波器(self guided filter)。
  3. restoration_type 指定应该使用哪种恢复滤波器,其解释与 FrameRestorationType 相同。
  4. lr_sgr_set 指定用于自引导滤波器的参数集。
  5. subexp_more_bools 等于 0 表示参数在范围 mk 到 mk+a-1 内。subexp_more_bools 等于 1 表示参数大于 mk+a-1。
  6. subexp_unif_bools 指定参数减去 mk 的值。
  7. subexp_bools 指定参数减去 mk 的值。

瓦片列表OBU语义(Tile list OBU semantics)

通用瓦片列表OBU语义(General tile list OBU semantics)

  1. output_frame_width_in_tiles_minus_1 加一后是输出帧的宽度,单位是瓦片单位。
  2. output_frame_height_in_tiles_minus_1 加一后是输出帧的高度,单位是瓦片单位。
  3. tile_count_minus_1 加一后是列表中 tile_list_entry 的数量。比特流一致性的要求是 tile_count_minus_1 必须小于或等于 511。

瓦片列表条目语义(Tile list entry semantics)

  1. anchor_frame_idx 是一个索引,指向 AnchorFrames 数组中用于瓦片预测的帧。AnchorFrames 数组由外部方式提供,并且可能在每个瓦片列表 OBU 中发生变化。创建 AnchorFrames 数组的过程不在本规范的范围内。 比特流一致性的要求是 anchor_frame_idx 必须小于或等于 127。
  2. anchor_tile_row 是瓦片在它所属帧中的行坐标,以瓦片单位表示。 比特流一致性的要求是 anchor_tile_row 必须小于 TileRows。
  3. anchor_tile_col 是瓦片在它所属帧中的列坐标,以瓦片单位表示。 比特流一致性的要求是 anchor_tile_col 必须小于 TileCols。
  4. tile_data_size_minus_1 加一后是编码瓦片数据 coded_tile_data 的大小,单位是字节。
  5. coded_tile_data 是编码瓦片的 tile_data_size_minus_1 + 1 个字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

loadrunner个人笔记

创建场景配置: 两个同时 去四:日志、时间、模拟、其他自动事务 加一:首选项 1、写脚本,沟通官方、文件打印扫描 MFI-sw.support.gsd.imsc.sda.globalopentext.com support.casemicrofocus.com 支持资源 | Micro Focus | OpenT…

【毕业论文+源码】基于ASP的课程指导平台的开发

引 言 随着全球信息化技术的兴起,特别是Internet的日益普及,解决了信息Internet上传递的问题,建立了一个组织得很好的信息结构框架,使得Internet用户能够在Internet上的任何一个终端,以一种简单、统一的方式来访问超…

Leetcode Hot 100刷题记录 -Day18(反转链表)

反转链表: 问题描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出&a…

视频监控相关笔记

一、QT 之 QTreeWidget 树形控件 Qt编程指南,Qt新手教程,Qt Programming Guide 一个树形结构的节点中的图表文本 、附带数据的添加: QTreeWidgetItem* TourTreeWnd::InsertNode(NetNodeInfo node, QTreeWidgetItem* parent_item) { // …

回文子串通用做法

647. 回文子串 先引出力扣链接 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1: 输入:"abc" 输出…

for循环的应用

正三角 for (int i 0; i < 8; i) { for (int j 0; j < 15; j) { int kong 8 - i - 1; int star 2 * i 1; if (j < kong) { Console.Write(" "); } else if (j < kong star)…

【LLM学习之路】9月23日24日 第十、十一天 Attention代码解读

【LLM学习之路】9月23日24日 第十、十一天 Attention代码解读 Transformer模型大致分为三类 纯 Encoder 模型&#xff08;例如 BERT&#xff09;&#xff0c;又称自编码 (auto-encoding) Transformer 模型&#xff1b;纯 Decoder 模型&#xff08;例如 GPT&#xff09;&#…

多颜色绘制语义分割/变化检测结果图

在论文绘图时&#xff0c;传统的二元语义分割结果图颜色单一&#xff08;下图左&#xff09;&#xff0c;所以论文中常根据混淆矩阵类别使用多颜色进行绘制&#xff08;下图右&#xff09;&#xff0c;可以看到&#xff0c;结果的可视化效果更好。 以下是绘制代码&#xff1a; …

同等学力申硕英语网课如何选择

很多考生想知道同等学力申硕英语网课如何选择&#xff0c;小编告诉大家&#xff0c;首先明确自己的学习目标和需求是为了提高口语、阅读、写作还是听力能力? 只有明确了自己的学习目标和需求&#xff0c;才能更好地选择适合自己的课程和平台。 二、选择知名品牌和口碑良好的平…

UE5地图白屏/过曝/非常亮の解决方法

今天遇到一个问题 , 新建项目 , 打开虚幻第三人称地图的默认关卡 , 发现白屏 , 啥也看不见 猜测可能是虚幻编辑器的bug , 造成白屏的原因应该是场景过曝了 记录一下解决方案 第一种解决方法 找到场景中的 后期处理体积 (PostProcessVolume) 直接删掉 或者找到 细节面板中 -…

衍射的角谱理论

一、单色平面波与本征函数 不考虑夫琅禾费近似, 则相干光场在给定二平面间的传播过程就是通过一个二维线性空不变系统。 上式函数是这个系统的本征函数,表示振幅为1的平面波在xy平面上的复振幅分布,空间频率分量 = cos / , = cos / 与平面波的传播方向相联系, 空间…

java和mysql命名规则不一样,每次在mybatis中起别名太麻烦?来看看如何设置自动自动映射!

简介&#xff1a; 在 Java 开发中&#xff0c;当使用 MyBatis 框架连接 Java 代码与 MySQL 数据库时&#xff0c;常常会遇到 Java 和 MySQL 命名规则不一致的问题&#xff0c;这使得每次在 MyBatis 中为查询结果起别名变得繁琐。本教程将深入探讨如何设置自动映射&#xff0c;以…

java节假日工具类,判断一个日期是否是法定节假日

java节假日工具类&#xff0c;判断一个日期是否是法定节假日 1.HolidayUtil工具类2.工具类生成的日期json文件3.结果展示 无需链接数据库&#xff0c;无需手写节假日集合列表 1.HolidayUtil工具类 import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.data…

DataGemma:谷歌大模型

诸神缄默不语-个人CSDN博文目录 DataGemma是谷歌出的大模型&#xff0c;是gemma 2的升级版&#xff0c;主要亮点是基于检索解决幻觉问题。 在huggingface和kaggle上均可下载模型权重。 检索数据源是Google’s Data Commons知识图谱。 官方博客&#xff1a;https://blog.googl…

Centos redis下载安装以及redis manager连接详细教程

一、redis下载以安装&#xff1a; 1.切换到home目录下 cd /home&#xff08;/是根目录&#xff0c;./是当前目录 ../是父目录&#xff09; 2.执行wget http://download.redis.io/releases/redis-5.0.2.tar.gz&#xff08;这里&#xff0c;不知道为什么安装6开头的版本在make的…

定制智慧科技展厅方案:哪些细节是成功的秘诀?

随着数字科技浪潮的迅猛推进&#xff0c;智慧科技展厅跃升为科技成果展示与技术对话的前沿阵地。其策划与实施方案因而显得尤为关键。在此过程中&#xff0c;精雕细琢每一环节&#xff0c;确保创意与技术的无缝对接&#xff0c;成为不可或缺的要点。现在&#xff0c;让我们深入…

CS创世8GB SD NAND的低功耗特性

在电子设备不断追求低功耗的今天&#xff0c;CS创世半导体的8GB SD NAND芯片以其低功耗特性脱颖而出。这款芯片的读写电流仅为15mA&#xff0c;相较于同类产品&#xff0c;其功耗显著降低&#xff0c;这不仅延长了设备的使用时间&#xff0c;还减少了对电池的依赖。这种低功耗特…

HDMI20协议解析_Audio_Sample

HDMI20协议解析_Audio_Sample 1.版本说明 日期作者版本说明202409XX风释雪初始版本 2.概述 当通过HDMI传输音频信号时&#xff0c;Audio_Sample是必须要传输的数据包之一&#xff1b; 通过前端硬件或软件收到PCM原始音频数据后&#xff0c;需要通过Audio_Sample packet发送给…

跟着B战学习JAVA面试八股文

学习链接&#xff1a;https://www.bilibili.com/video/BV1gm411S7EX/?spm_id_from333.337.search-card.all.click&vd_sourceefbaa07876b231ae3225ba8999116807 创建线程的几种方式&#xff1f; 继承Thread类实现Runnable接口实现Callable接口通过线程池来创建线程 为什么…

fiddler抓包09_过滤站点请求

课程大纲 1、 界面 Fiddler列表默认显示所有请求&#xff0c;可以设置过滤&#xff0c;按照规则只显示指定的请求。 界面介绍&#xff1a; “Use Filters”&#xff1a;过滤功能开关。勾选&#xff0c;开启过滤&#xff1b;反之不开启。 “Hosts”&#xff1a;根据站点&#xf…