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

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

原文地址: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语义(Frame header OBU semantics)

参考帧标记语义(Reference frame marking semantics)

  1. RefValid 是一个数组,它通过参考图片槽位编号进行索引。数组中的值为1表示对应的参考图片槽位有效,可以作为参考图片使用;值为0则表示对应的参考图片槽位无效,不能作为参考图片使用。
    • 注意:RefValid 仅在 frame_id_numbers_present_flag 等于1时用于定义有效的比特流。当帧距离过远,无法通过帧ID机制进行引用时,这些帧会被标记为无效。

帧大小语义(Frame size semantics)

  1. frame_width_minus_1 加一等于帧的宽度,以亮度样本为单位。
  2. frame_height_minus_1 加一等于帧的高度,以亮度样本为单位。
    • 比特流一致性的要求是 frame_width_minus_1 必须小于或等于 max_frame_width_minus_1。
    • 比特流一致性的要求是 frame_height_minus_1 必须小于或等于 max_frame_height_minus_1。
    • 如果 FrameIsIntra 等于 0(表示该帧可能使用帧间预测),还必须满足第6.8.6节中描述的带有引用语义的帧大小的要求。

渲染大小语义(Render size semantics)

  1. 渲染尺寸是向应用程序提供的一个提示,关于期望的显示尺寸。它对解码过程没有影响。
  2. render_and_frame_size_different 等于 0 表示渲染宽度和高度是从帧宽度和高度推断出来的。render_and_frame_size_different 等于 1 表示渲染宽度和高度是明确编码的。
    • 注意:即使渲染尺寸与帧尺寸完全匹配,也允许比特流在比特流中明确编码渲染尺寸。
  3. render_width_minus_1 加一等于帧的渲染宽度,以亮度样本为单位。render_height_minus_1 加一等于帧的渲染高度,以亮度样本为单位。

带有参考的帧大小语义(Frame size with refs semantics)

  1. 对于间隔帧,帧大小可以设置为等于参考帧的大小,或者可以显式发送。
  2. found_ref 等于 1 表示可以从参考帧 i 推断出帧尺寸,其中 i 是在 frame_size_with_refs`语法解析过程中的循环计数器。found_ref 等于 0 表示帧尺寸不能从参考帧 i 推断出来。
  3. 一旦为间隔帧计算出 FrameWidth 和 FrameHeight,对于所有 i 的值在 0…(REFS_PER_FRAME - 1) 的范围内,必须满足以下所有条件以符合比特流一致性要求:
    • 2 * FrameWidth >= RefUpscaledWidth[ref_frame_idx[i]]
    • 2 * FrameHeight >= RefFrameHeight[ref_frame_idx[i]]
    • FrameWidth <= 16 * RefUpscaledWidth[ref_frame_idx[i]]
    • FrameHeight <= 16 * RefFrameHeight[ref_frame_idx[i]]
    • 注意:即使间隔帧中的所有块都使用内插预测进行编码,这也是一个要求。

超分参数语义(Superres params semantics)

  1. use_superres 等于 0 表示不需要进行上采样。use_superres 等于 1 表示需要进行上采样。
  2. coded_denom 用于计算上采样的量。
  3. SuperresDenom 是一个分数的分母,它指定了上采样前后超块宽度之间的比例。这个分数的分子等于常数 SUPERRES_NUM。

计算图像大小语义(Compute image size semantics)

  1. MiCols 是帧中 4x4 块列的数量。
  2. MiRows 是帧中 4x4 块行的数量。

插值滤波器语义(Interpolation filter semantics)

  1. is_filter_switchable 等于 1 表示滤波器选择在块级别进行信号传输;is_filter_switchable 等于 0 表示滤波器选择在帧级别进行信号传输。
  2. interpolation_filter 指定用于执行间隔预测的滤波器选择:
    在这里插入图片描述

环路滤波器语义(Loop filter semantics)

  1. loop_filter_level 是一个包含循环滤波器强度值的数组。根据被过滤的图像平面和被过滤的边缘方向(垂直或水平),会使用数组中不同的循环滤波器强度值。
  2. loop_filter_sharpness 表示锐度水平。loop_filter_level 和 loop_filter_sharpness 共同决定何时对块边缘进行过滤,以及过滤可以改变样本值的程度。 循环滤波器的处理过程在第 7.14 节中描述。
  3. loop_filter_delta_enabled 等于 1 表示滤波器级别取决于用于预测块的模式和参考帧。loop_filter_delta_enabled 等于 0 表示滤波器级别不取决于模式和参考帧。
  4. loop_filter_delta_update 等于 1 表示存在额外的语法元素,这些元素指定哪些模式和参考帧增量需要更新。loop_filter_delta_update 等于 0 表示这些语法元素不存在。
  5. update_ref_delta 等于 1 表示存在语法元素 loop_filter_ref_delta;update_ref_delta 等于 0 表示这个语法元素不存在。
  6. loop_filter_ref_deltas 包含基于所选参考帧所需的滤波器级别调整。如果这个语法元素不存在,它保持其先前的值。
  7. update_mode_delta 等于 1 表示存在语法元素 loop_filter_mode_deltas;update_mode_delta 等于 0 表示这个语法元素不存在。
  8. loop_filter_mode_deltas 包含基于所选模式所需的滤波器级别调整。如果这个语法元素在帧中不存在,它保持其先前的值。
    ○ 注意:loop_filter_mode_deltas 和 loop_filter_ref_deltas 的先前值最初由 setup_past_independence 函数设置,并且可以由先前帧中编码的这些语法元素随后修改。

量化参数语义(Quantization params semantics)

  1. 残差通过解码系数指定,这些系数在应用逆变换之前会根据四个量化参数之一进行调整。选择哪个参数取决于平面(Y或UV)和系数位置(直流/交流系数)。去量化过程在第7.12节中指定。
  2. base_q_idx 表示基础帧的量化索引(qindex)。这用于Y交流系数,也是其他量化器的基准值。
  3. DeltaQYDc 表示相对于 base_q_idx 的Y直流量化器。
  4. diff_uv_delta 等于 1 表示U和V的增量量化器值分别编码。diff_uv_delta 等于 0 表示U和V的增量量化器值共享一个公共值。
  5. DeltaQUDc 表示相对于 base_q_idx 的U直流量化器。
  6. DeltaQUAc 表示相对于 base_q_idx 的U交流量化器。
  7. DeltaQVDc 表示相对于 base_q_idx 的V直流量化器。
  8. DeltaQVAc 表示相对于 base_q_idx 的V交流量化器。
  9. using_qmatrix 指定将使用量化器矩阵来计算量化器。
  10. qm_y 指定用于亮度平面解码的量化器矩阵中的级别。
  11. qm_u 指定用于色度U平面解码的量化器矩阵中的级别。
  12. qm_v 指定用于色度V平面解码的量化器矩阵中的级别。

Delta量化器语义(Delta quantizer semantics)

  1. delta_coded 指定是否存在 delta_q 语法元素。
  2. delta_q 指定了相对于基础量化指数(base_q_idx)的特定量化参数的偏移量。

段参数语义(Segmentation params semantics)

  1. AV1提供了一种将图像分割并在分段级别应用各种调整的方法。对于任何给定的帧,可以指定最多8个这样的分段。对于这些分段中的每一个,可以指定:
    • 量化器(绝对值或增量值)。
    • 循环滤波器强度(绝对值或增量值)。
    • 预测参考帧。
    • 块跳过模式,这意味着使用(0,0)运动矢量,并且不编码残差。
  2. 每个分段的这些数据值可以在帧级别单独更新。如果在给定帧中没有更新某个值,则保留上一帧的值。关键帧、仅内帧或其他需要从过去帧值独立的帧(例如,为了实现错误恢复)是这一规则的例外。在这些情况下,所有值都会按照setup_past_independence的语义进行重置。
  3. 分段隶属关系(分段图)以4x4块的分辨率存储。如果对块的分段隶属关系没有明确的更新,则它将从帧到帧地保持(直到通过调用setup_past_independence进行重置)。
    • SegIdPreSkip 等于1表示在读取跳过语法元素之前将读取分段ID。SegIdPreSkip 等于0表示首先读取跳过语法元素。
    • LastActiveSegId 表示具有某些启用功能的最高档分段ID。这用于解码分段ID时,只解码对应于已使用分段的选择。
    • segmentation_enabled 等于1表示该帧使用了分段工具;segmentation_enabled 等于0表示该帧不使用分段。
    • segmentation_update_map 等于1表示在解码该帧期间更新了分段图。segmentation_update_map 等于0表示使用上一帧的分段图。
    • segmentation_temporal_update 等于1表示分段图的更新是相对于现有分段图编码的。segmentation_temporal_update 等于0表示新分段图的编码不参考现有分段图。
    • segmentation_update_data 等于1表示即将为每个分段指定新的参数。segmentation_update_data 等于0表示分段参数应保持其现有值。
    • feature_enabled 等于0表示相应的功能未被使用,并且其值为0。feature_enabled 等于1表示已编码了特征值。
    • feature_value 指定了分段特征的特征数据。

瓦片信息语义(Tile info semantics)

  1. uniform_tile_spacing_flag 等于1表示帧上的瓦片均匀分布。(换句话说,除了右边和底部可能更小的瓦片外,所有瓦片大小相同。)uniform_tile_spacing_flag 等于0表示瓦片大小是编码的。
  2. increment_tile_cols_log2 用于计算 TileColsLog2。 TileColsLog2 指定帧横向瓦片数量的基数2对数。 TileCols 指定帧横向的瓦片数量。比特流一致性的要求是 TileCols 小于或等于 MAX_TILE_COLS。
  3. increment_tile_rows_log2 用于计算 TileRowsLog2。 TileRowsLog2 指定帧纵向瓦片数量的基数2对数。 注意:对于小尺寸的帧,由于瓦片大小向上取整到最大超块大小的倍数,实际瓦片数量可能小于期望数量。
  4. TileRows 指定帧纵向的瓦片数量。比特流一致性的要求是 TileRows 小于或等于 MAX_TILE_ROWS。
  5. tileWidthSb 用于指定每个瓦片的宽度,单位是超块。比特流一致性的要求是 tileWidthSb 小于 maxTileWidthSb。
  6. tileHeightSb 用于指定每个瓦片的高度,单位是超块。比特流一致性的要求是 tileWidthSb * tileHeightSb 小于 maxTileAreaSb。
    • 如果 uniform_tile_spacing_flag 等于0,比特流一致性的要求是当循环写入 MiColStarts 退出时,startSb 等于 sbCols。
    • 如果 uniform_tile_spacing_flag 等于0,比特流一致性的要求是当循环写入 MiRowStarts 退出时,startSb 等于 sbRows。
    • 注意:对 startSb 的要求确保了每个瓦片的大小加起来等于帧的全尺寸,当以超块为单位测量时。
  7. MiColStarts 是一个数组,指定了图像中每个瓦片的起始列(单位是4x4亮度样本)。
  8. MiRowStarts 是一个数组,指定了图像中每个瓦片的起始行(单位是4x4亮度样本)。
  9. width_in_sbs_minus_1 指定瓦片宽度减1的单位是超块。
  10. height_in_sbs_minus_1 指定瓦片高度减1的单位是超块。
  11. maxTileHeightSb 指定瓦片可以使用的最大高度(单位是超块)(为了避免瓦片面积过大)。
  12. context_update_tile_id 指定用于CDF更新的瓦片。比特流一致性的要求是 context_update_tile_id 小于 TileCols * TileRows。
  13. tile_size_bytes_minus_1 用于计算 TileSizeBytes。
  14. TileSizeBytes 指定编码每个瓦片大小所需的字节数。
    量化器索引 delta 参数语义(Quantizer index delta parameters semantics)
  15. delta_q_present 指定是否存在量化指数增量值。
  16. delta_q_res 指定应该应用于解码后的量化指数增量值的左移位数。
    环路滤波器 delta 参数语义(Loop filter delta parameters semantics)
  17. delta_lf_present 指定是否存在循环滤波器增量值。
  18. delta_lf_res 指定应该应用于解码后的循环滤波器增量值的左移位数。
  19. delta_lf_multi 等于1表示为水平亮度边缘、垂直亮度边缘、U边缘和V边缘分别发送不同的循环滤波器增量值。delta_lf_multi 等于0表示所有边缘使用相同的循环滤波器增量值。

全局运动参数语义(Global motion params semantics)

  1. is_global 指定是否为特定的参考帧存在全局运动参数。
  2. is_rot_zoom 指定特定的参考帧是否使用旋转和缩放全局运动。
  3. is_translation 指定特定的参考帧是否使用平移全局运动。

全局参数语义(Global param semantics)

  1. absBits 用于计算可用于 gm_params[ref][idx] 的值的范围。允许的值在 -(1 << absBits) 到 (1 << absBits) 的范围内。
  2. precBits 指定用于表示 gm_params[ref][idx] 的分数位数。所有全局运动参数都以 WARPEDMODEL_PREC_BITS 分数位数存储在模型中,但参数的编码精度较低。

解码子指数语义(Decode subexp semantics)

  1. subexp_final_bits 提供了在确定了适当的范围之后读取的最终比特。
  2. subexp_more_bits 等于 0 表示参数在范围 mk 到 mk+a-1 内。subexp_more_bits 等于 1 表示参数大于 mk+a-1。
  3. subexp_bits 指定了参数的值减去 mk。
    胶片颗粒参数语义(Film grain params semantics)
  4. apply_grain 等于 1 表示应该在该帧添加电影颗粒。apply_grain 等于 0 表示不应该添加电影颗粒。
  5. reset_grain_params() 是一个函数调用,表示应该将 film_grain_params 中读取的所有语法元素设置为 0。
  6. grain_seed 指定用于电影颗粒合成过程中伪随机数的起始值。
  7. update_grain 等于 1 表示应该发送一组新的参数。update_grain 等于 0 表示应该使用之前的参数集。
  8. film_grain_params_ref_idx 指示哪个参考帧包含该帧要使用的的电影颗粒参数。 比特流一致性的要求是 film_grain_params_ref_idx 等于 ref_frame_idx[j],其中 j 的值在 0 到 REFS_PER_FRAME - 1 的范围内。
    • 注意:这个要求意味着电影颗粒只能从当前帧作为参考帧的帧中预测。
  9. load_grain_params(idx) 是一个函数调用,表示应该将 film_grain_params 中读取的所有语法元素设置为由索引 idx 指定的内存区域中存储的值。
  10. tempGrainSeed 是一个临时变量,用于在调用 load_grain_params 时避免丢失 grain_seed 的值。当 update_grain 等于 0 时,应该使用之前的参数集,除了 grain_seed。
  11. num_y_points 指定亮度分量的分段线性缩放函数的点数。比特流一致性的要求是 num_y_points 小于或等于 14。
  12. point_y_value[i] 表示亮度分量的分段线性缩放函数的第 i 个点的 x(亮度值)坐标。这些值在 0…255 的尺度上信号化。(如果是10位视频,这些值对应于亮度值除以 4。如果是12位视频,这些值对应于亮度值除以 16。) 如果 i 大于 0,比特流一致性的要求是 point_y_value[i] 大于 point_y_value[i - 1](这确保了 x 坐标按递增顺序指定)。
  13. point_y_scaling[i] 表示亮度分量的分段线性缩放函数的第 i 个点的缩放(输出)值。
  14. chroma_scaling_from_luma 指定色度缩放是从亮度缩放推断出来的。
  15. num_cb_points 指定 cb 分量的分段线性缩放函数的点数。比特流一致性的要求是 num_cb_points 小于或等于 10。 注意:当 chroma_scaling_from_luma 等于 1 时,仍然允许 num_y_points 取值高达 14。这意味着色度缩放也需要支持高达 14 个点。
  16. point_cb_value[i] 表示 cb 分量的分段线性缩放函数的第 i 个点的 x 坐标。这些值在 0…255 的尺度上信号化。 如果 i 大于 0,比特流一致性的要求是 point_cb_value[i] 大于 point_cb_value[i - 1]。
  17. point_cb_scaling[i] 表示 cb 分量的分段线性缩放函数的第 i 个点的缩放(输出)值。
  18. num_cr_points 表示 cr 分量的分段线性缩放函数的点数。 比特流一致性的要求是 num_cr_points 小于或等于 10。 如果 subsampling_x 等于 1 并且 subsampling_y 等于 1 并且 num_cb_points 等于 0,比特流一致性的要求是 num_cr_points 等于 0。 如果 subsampling_x 等于 1 并且 subsampling_y 等于 1 并且 num_cb_points 不等于 0,比特流一致性的要求是 num_cr_points 不等于 0。
    • 注意:这些要求确保了对于 4:2:0 色度子采样,电影颗粒噪声将应用于两个色度分量,或者都不适用。对于 4:2:2 或 4:4:4 色度子采样没有限制。
  19. point_cr_value[i] 表示 cr 分量的分段线性缩放函数的第 i 个点的 x 坐标。这些值在 0…255 的尺度上信号化。 如果 i 大于 0,比特流一致性的要求是 point_cr_value[i] 大于 point_cr_value[i - 1]。
  20. point_cr_scaling[i] 表示 cr 分量的分段线性缩放函数的第 i 个点的缩放(输出)值。
  21. grain_scaling_minus_8 表示应用于色度分量值的 -8 偏移。grain_scaling_minus_8 可以取值 0…3,决定了电影颗粒标准差的量程和量化步长。
  22. ar_coeff_lag 指定亮度和色度的自回归系数的数量。
  23. ar_coeffs_y_plus_128[i] 指定用于 Y 平面的自回归系数。
  24. ar_coeffs_cb_plus_128[i] 指定用于 U 平面的自回归系数。
  25. ar_coeffs_cr_plus_128[i] 指定用于 V 平面的自回归系数。
  26. ar_coeff_shift_minus_6 指定自回归系数的范围。值 0、1、2 和 3 分别对应于自回归系数的范围 [-2, 2)、[-1, 1)、[-0.5, 0.5) 和 [-0.25, 0.25)。
  27. grain_scale_shift 指定在颗粒合成过程中高斯随机数应该被缩小多少。
  28. cb_mult 表示用于推导 cb 分量缩放函数输入索引的 cb 分量乘数。
  29. cb_luma_mult 表示用于推导 cb 分量缩放函数输入索引的平均亮度分量乘数。
  30. cb_offset 表示用于推导 cb 分量缩放函数输入索引的偏移量。
  31. cr_mult 表示用于推导 cr 分量缩放函数输入索引的 cr 分量乘数。
  32. cr_luma_mult 表示用于推导 cr 分量缩放函数输入索引的平均亮度分量乘数。
  33. cr_offset 表示用于推导 cr 分量缩放函数输入索引的偏移量。
  34. overlap_flag 等于 1 表示应该应用电影颗粒块之间的重叠。overlap_flag 等于 0 表示不应该应用电影颗粒块之间的重叠。
  35. clip_to_restricted_range 等于 1 表示在添加电影颗粒后应该将样本值限制在限制(工作室)范围内(有关工作室摆动的解释,请参阅 color_range 的语义)。clip_to_restricted_range 等于 0 表示在添加电影颗粒后应该将样本值限制在全范围内。

变换模式语义(TX mode semantics)

  1. tx_mode_select 用于计算 TxMode。
  2. TxMode 指定如何确定变换大小:
    在这里插入图片描述
    • 对于 tx_mode 等于 TX_MODE_LARGEST,逆变换将使用能够适应块内的最大变换大小。
    • 对于 tx_mode 等于 ONLY_4X4,逆变换将仅使用 4x4 的变换。
    • 对于 tx_mode 等于 TX_MODE_SELECT,每个块的变换大小将被明确指定。

跳过模式语义(skip mode semantics)

  1. SkipModeFrame[list] 指定在 skip_mode 等于 1 时用于复合预测的帧。
  2. skip_mode_present 等于 1 表示语法元素 skip_mode 将存在。skip_mode_present 等于 0 表示该帧不使用 skip_mode。
    • 注意:跳过模式尝试使用最近的前向和后向参考帧(根据 RefOrderHint 数组中的值进行测量)。如果未找到后向参考,则使用第二最近的前向参考。如果未找到前向参考,则禁用跳过模式。(前向预测是指使用被认为在当前帧之前输出的帧作为参考,后向预测是指使用尚未输出的帧作为参考。)

帧参考模式语义(Frame reference mode semantics)

  1. reference_select 等于 1 表示用于间隔块的模式信息包含语法元素 comp_mode,该元素指示是使用单一参考预测还是复合参考预测。reference_select 等于 0 表示所有间隔块将使用单一预测。

时间点信息语义(Temporal point info semantics)

  1. frame_presentation_time 指定了帧的呈现时间,这是从正在解码的运行点的最后一个随机访问点的移除时间开始,以时钟滴答(DispCT)计的。这个语法元素被信号化为一个固定长度的无符号整数,其长度(以比特为单位)由 frame_presentation_time_length_minus_1 + 1 决定。frame_presentation_time 是模 1 <<(frame_presentation_time_length_minus1+1) 计数器的余数。

帧OBU语义(Frame OBU semantics)

  1. 一个帧OBU由帧头OBU和瓦片组OBU组成,它们被打包进一个单一的OBU中。
    • 注意:目的是为常见用例提供一个更紧凑的编码方式,在这种用例中,帧头紧随瓦片组数据之后。

http://www.mrgr.cn/news/34288.html

相关文章:

  • Java面向对象特性与泛型:深入理解与应用
  • 使用离线模型放在项目中,导致项目代码很大,怎么解决
  • 127.0.0.1和0.0.0.0的区别
  • Windows本地部署开源趣味画风白板手绘工具Excalidraw并实现远程操作
  • Git 命令宝典,这篇就够了~
  • 优可测一键闪测仪:实现冲压端子的快速精准尺寸检测
  • (附源码)基于django的电力工程作业现场物资管理系统的设计与实现-计算机毕设 22067
  • Qt之QFuture理解
  • 统信服务器操作系统ade版【iostat】命令详解
  • 2024年倒计时提醒软件哪个好?倒计时提醒app
  • 寄大件快递用什么物流更便宜,寄20-200公斤大件价格对比
  • C++ 异步编程中:future与promise、packaged_task、async
  • Android对象池的深入理解和使用
  • gif怎么压缩变小一点?6种方法你快速压缩gif
  • 一文读懂HPA弹性扩展自定义指标和缩放策略
  • 【数据结构-栈】力扣844. 比较含退格的字符串
  • 更新gitignore后如何使其生效
  • 如何高效绘制ER图?
  • 2024.09.14 校招 实习 内推 面经
  • 稳定为恒定功率负载供电的 DC/DC 转换器