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

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

原文地址: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 个字节。

相关文章:

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

原文地址:https://aomediacodec.github.io/av1-spec/av1-spec.pdf 没有梯子的下载地址:AV1 Bitstream & Decoding Process Specification摘要:这份文档定义了开放媒体联盟(Alliance for Open Media)AV1视频编解码…...

APISIX 联动雷池 WAF 实现 Web 安全防护

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。 雷池是由长亭科技开发的 WAF 系统,提供对 HTTP 请求的安全请求,提供完整的 API 管理和…...

音频剪辑还能在线做?以前的我真是OUT了,效果秒杀专业软件

以前,剪辑音频都得靠那些专业的音频师,用很贵的设备和复杂的软件才行。不过,现在有了互联网和云计算,在线音频剪辑变得简单多了。只要你有台能上网的电脑或者手机,就能轻松做出很棒的音频。这个变化让更多人都能玩音频…...

Library介绍(三)

环境描述 工作条件 一般lib文件里面包含了芯片的工作条件即operation conditions,其指定了工艺(process)、温度(temperature)和电压(voltage),见图1。 其中,process代表了…...

VMware搭建DVWA靶场

目录 1.安装phpstudy 2.搭建DVWA 本次搭建基于VMware16的win7系统 1.安装phpstudy 下载windows版本:小皮面板-好用、安全、稳定的Linux服务器面板! 安装后先开启mysql再开启apache,遇到mysql启动不了的情况,最后重装了phpstud…...

使用 Llama-index 实现的 Agentic RAG-Router Query Engine

前言 你是否也厌倦了我在博文中经常提到的老式 RAG(Retrieval Augmented Generation | 检索增强生成) 系统?反正我是对此感到厌倦了。但我们可以做一些有趣的事情,让它更上一层楼。接下来就跟我一起将 agents 概念引入传统的 RAG 工作流,重新…...

一行命令将Cmder添加到系统右键菜单中----配置环境

第一步,去官网下载一个简版的文件 ** 第二步,将下载的文件解压后如图,找到Cmder.exe右键以管理员身份运行 第三步,在窗口输入cmder /register all然后回车 第四步,OK!不管在哪里都可以使用了,直接右键即可...

【系统架构设计师】专题:基于构件的软件工程考点

更多内容请见: 备考系统架构设计师-核心总结目录 文章目录 一、构件概述二、构件模型三、CBSE的特征四、CBSE的过程五、构件组装一、构件概述 基于构件的软件工程(Component-Based Software Engineering,CBSE) 是一种基于分布对象技术、 强调通过可复用构件设计与构造软件系…...

目前最好用的爬虫软件是那个?

作为一名数据工程师,三天两头要采集数据,用过十几种爬虫软件,也用过Python爬虫库,还是建议新手使用现成的软件比较方便。 这里推荐3款不错的自动化爬虫工具,八爪鱼、亮数据、Web Scraper 1. 八爪鱼爬虫 八爪鱼爬虫是一…...

运营计划管理——电商运营(案例分享)

运营计划,作为运营管理的重要组成部分,通过科学规划与有效执行,对确保企业目标实现起着至关重要的作用。 运营计划是指通过制定、执行、监控和调整运营计划,以确保企业资源得到合理配置,业务活动有序进行,最…...

【WRF工具】WRF Domain Wizard第二期:服务器中下载及安装

【WRF工具】WRF Domain Wizard第二期:服务器下载及安装 准备WRF Domain Wizard下载及安装WRF Domain Wizard下载WRF Domain Wizard安装添加环境变量(为当前用户永久添加环境变量)Java环境安装报错-Exception in thread "main" java…...

信安 实验1 用Wireshark分析典型TCP/IP体系中的协议

我发现了有些人喜欢静静看博客不聊天呐, 但是ta会点赞。 这样的人呢帅气低调有内涵, 美丽大方很优雅。 说的就是你, 不用再怀疑哦 实验1 用Wireshark分析典型TCP/IP体系中的协议 实验目的 通过Wireshark软件分析典型网络协议数据包&a…...

Halcon内部和外部函数,区分明白

我们从保存位置,使用范围,跨程序使用,及修改时影响面来说 内部函数 只存在于当前的halcon程序, 是程序体的一部分,随程序一起保存, 只能在当前定义的程序内当做算子使用 其他程序想使用,需要通过…...

使用 pypdf 给 PDF 添加目录书签

""" dir.txt的形式 第1章 计算机系统基础知识 1 1.1 嵌入式计算机系统概述 1 1.2 数据表示 4 1.2.1 进位计数制及转换 4 1.2.2 数值型数据的表示 6 第2章 嵌入式系统硬件基础知识 56 2.1 数字电路基础 56 2.1.1 信号特征 56 2.1.2 组合逻辑电路和时序逻辑电路 5…...

2025郑州台球展,河南台球展会,智能台球桌展3月举办

壹肆柒台球展,整合全面优势资源,与业界一道倾力打造全国型台球贸易和交流盛会; 2025中国(郑州)国际台球产业博览会(壹肆柒台球展) The 2025 China (Zhengzhou) International Billiards Indust…...

Vue下载静态文件

1、需求:将静态文件放在本地,让用户进行下载。 2、文件位置: ① 原生js:直接将文件放在某个目录或者根目录下 ② Vue:将文件放在根目录的public文件夹下面 3、代码示例: const url "/模板.xlsx"…...

04 B-树

目录 常见的搜索结构B-树概念B-树的插入分析B-树的插入实现B树和B*树B-树的应用 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O( l o g 2 N log_2N log2​N)二分搜索树无要求O(N)二叉平衡树无要求O( l o g 2 N log_2N log2​N)哈希无要求O(1) 以…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27目录1. VisScience: An Extensive Benchmark for Evaluating K12 Educational Multi-modal Scientific Reasoning VisScience:…...

恋爱辅助应用小程序app开发之广告策略

恋爱话术小程序带流量主广告开启,是一个有效的盈利模式,可以增加小程序的收入来源。以下是对此的详细分析 一、流量主广告的定义与优势 流量主广告是指在小程序中嵌入广告位,通过展示广告内容来获取广告主的付费。对于恋爱话术小程序而言&am…...

iTextPDF中,要实现表格中的内容在数据长度超过边框时自动换行

在iTextPDF中,要实现表格中的内容在数据长度超过边框时自动换行,你可以使用Phrase对象并设置其HyphenationEvent,或者使用Chunk对象并设置其setSplitCharacter方法。以下是一些方法来实现这一功能: 1. 使用Phrase对象&#xff1a…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...