libaom 编码参数详细介绍--3:扩展编码参数解析

roi

  1. aom_roi_map 结构体

    • 解释:aom 感兴趣区域映射;ROI映射是一种技术,用于标识帧中用户认为重要的区域,以便编码器可以对这些区域进行优化编码,例如提高这些区域的编码质量或分配更多的比特率。
    • *roi_map:指向一个数组,用于为每个8x8区域分配一个ID。每个ID对应一个特定的ROI,用于标识该区域的重要性。
    • rows:行的数量,表示感兴趣区域的宽。
    • cols:列的数量,表示感兴趣区域的高。
    • delta_q:为每个ROI段指定量化器增量(Quantizer deltas)。量化器增量用于调整该段内区域的量化级别。最大值为AOM_MAX_SEGMENTS,即为 8,表示一帧最多有 8 个 ROI。
    • delta_lf:为每个ROI段指定循环滤波器增量(Loop filter deltas)。循环滤波器增量用于调整该段内区域的去块效应和其它滤波处理。最大值为AOM_MAX_SEGMENTS,即为 8。
    • static_threshold:为每个ROI段指定静态跳出阈值(Static breakout threshold)。这个阈值用于控制编码器在该段内进行更复杂编码处理的触发条件。
/*!\brief  aom region of interest map
 *
 * These defines the data structures for the region of interest map
 *
 * TODO(yaowu): create a unit test for ROI map related APIs
 *
 */
typedef struct aom_roi_map {
  /*! An id between 0 and 7 for each 8x8 region within a frame. */
  unsigned char *roi_map;
  unsigned int rows;              /**< Number of rows. */
  unsigned int cols;              /**< Number of columns. */
  int delta_q[AOM_MAX_SEGMENTS];  /**< Quantizer deltas. */
  int delta_lf[AOM_MAX_SEGMENTS]; /**< Loop filter deltas. */
  /*! Static breakout threshold for each segment. */
  unsigned int static_threshold[AOM_MAX_SEGMENTS];
} aom_roi_map_t;
  1. aom_active_map_t 结构体
    • 解释:AOM 活动区域映射,活动区域映射(active region map)是一种技术,用于标识帧中包含重要内容(如运动或细节)的区域,以便编码器可以集中资源对这些区域进行编码,从而提高编码效率。
    • *active_map:指向一个数组,用于标识每个16x16区域是否为活动区域。数组中的每个元素对应帧中的一个16x16区域,值为1表示该区域是活动的,值为0表示该区域是非活动的。
    • rows:行的数量,表示活动区域的宽。
    • cols:列的数量,表示活动区域的高。
/*!\brief  aom active region map
 *
 * These defines the data structures for active region map
 *
 */

typedef struct aom_active_map {
  /*!\brief specify an on (1) or off (0) each 16x16 region within a frame */
  unsigned char *active_map;
  unsigned int rows; /**< number of rows */
  unsigned int cols; /**< number of cols */
} aom_active_map_t;

scale

  1. aom_scaling_mode_t 结构体
    • 解释:指定图像的水平和垂直缩放模式。
    • h_scaling_mode:表示水平方向上的缩放模式。
    • v_scaling_mode:表示垂直方向上的缩放模式。
/*!\brief  aom image scaling mode
 *
 * This defines the data structure for image scaling mode
 *
 */
typedef struct aom_scaling_mode {
  AOM_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */
  AOM_SCALING_MODE v_scaling_mode; /**< vertical scaling mode   */
} aom_scaling_mode_t;

timing info

  1. aom_timing_info_type_t 枚举
    • 解释:用于AV1编码器中指定时间信息的类型。时间信息类型用于告诉解码器帧与帧之间的时间关系,这有助于确保视频播放时的时间准确性。
    • AOM_TIMING_UNSPECIFIED:不指定时间信息。在这种情况下,解码器可能需要依赖于默认设置或者其他外部信息来确定帧的时间关系。
    • AOM_TIMING_EQUAL:指定所有帧具有相同的持续时间。这可以用于那些帧率恒定的视频。
    • AOM_TIMING_DEC_MODEL:使用解码器模型来指定时间信息。这允许编码器为解码器提供一个模型,解码器可以使用这个模型来计算帧之间的时间间隔。
/*!brief AV1 encoder timing info type signaling */
typedef enum {
  AOM_TIMING_UNSPECIFIED,
  AOM_TIMING_EQUAL,
  AOM_TIMING_DEC_MODEL
} aom_timing_info_type_t;

tune

  1. aom_tune_content 枚举
    • 解释:AV1 编码器内容类型,根据视频内容的不同,编码器可以进行不同的优化,以提高编码效率和视频质量。
    • AOM_CONTENT_DEFAULT:默认的内容类型。如果编码器不能确定视频内容的具体类型,或者没有指定内容类型,将使用这种默认设置。
    • AOM_CONTENT_SCREEN:屏幕内容。这种类型通常用于编码屏幕录制、动画或图形密集型视频。这些视频通常包含更多的文字、颜色块和细节纹理,编码器会针对这些特点进行优化。
    • AOM_CONTENT_FILM:电影内容。这种类型通常用于编码真实拍摄的电影或电视剧。这些视频通常包含更多的自然场景、复杂的纹理和运动模糊,编码器会针对这些特点进行优化。
    • AOM_CONTENT_INVALID:说明:无效的内容类型。这通常用作错误检查,以确保内容类型的值在有效范围内。
/*!brief AV1 encoder content type */
typedef enum {
  AOM_CONTENT_DEFAULT,
  AOM_CONTENT_SCREEN,
  AOM_CONTENT_FILM,
  AOM_CONTENT_INVALID
} aom_tune_content;
  1. aom_tune_metric 枚举
    • 解释:微调参数模型,用于指定编码器在进行率失真(Rate-Distortion,RD)优化时应该针对的特定输入材料类型。这种调整可以帮助编码器针对特定的视频质量评估指标进行优化。
    • AOM_TUNE_PSNR:调整编码器以优化峰值信噪比(PSNR)。
    • AOM_TUNE_SSIM:调整编码器以优化结构相似性(SSIM)。
    • AOM_TUNE_VMAF_WITH_PREPROCESSING:调整编码器以优化视频多方法评估融合(VMAF)得分,同时包括预处理步骤。
    • AOM_TUNE_VMAF_WITHOUT_PREPROCESSING:调整编码器以优化VMAF得分,但不包括预处理步骤。
    • AOM_TUNE_VMAF_MAX_GAIN:调整编码器以最大化VMAF得分的增益。
    • AOM_TUNE_VMAF_NEG_MAX_GAIN:调整编码器以最大化VMAF得分的负增益。
    • AOM_TUNE_BUTTERAUGLI:调整编码器以优化Butteraugli得分。Butteraugli是一种基于多尺度结构相似性指数(MS-SSIM)的评估指标。
    • AOM_TUNE_VMAF_SALIENCY_MAP:调整编码器以优化VMAF得分,同时考虑视觉显著性图。视觉显著性图是一种表示图像中哪些区域更吸引视觉注意力的图像。
/*!\brief Model tuning parameters
 *
 * Changes the encoder to tune for certain types of input material.
 *
 */
typedef enum {
  AOM_TUNE_PSNR = 0,
  AOM_TUNE_SSIM = 1,
  /* NOTE: enums 2 and 3 unused */
  AOM_TUNE_VMAF_WITH_PREPROCESSING = 4,
  AOM_TUNE_VMAF_WITHOUT_PREPROCESSING = 5,
  AOM_TUNE_VMAF_MAX_GAIN = 6,
  AOM_TUNE_VMAF_NEG_MAX_GAIN = 7,
  AOM_TUNE_BUTTERAUGLI = 8,
  AOM_TUNE_VMAF_SALIENCY_MAP = 9,
} aom_tune_metric;
  1. aom_dist_metric 枚举
    • 解释:用于指定在率失真(Rate-Distortion,RD)优化过程中使用的失真度量方法。
    • AOM_DIST_METRIC_PSNR:使用峰值信噪比(PSNR)作为块内RD优化的失真度量。PSNR是一种常用的视频质量评估指标,它测量的是原始视频和压缩视频之间的差异。
    • AOM_DIST_METRIC_QM_PSNR:使用量化矩阵加权的PSNR作为块内RD优化的失真度量。这种方法考虑了量化矩阵对不同区域的加权,以更准确地评估失真。如果编译时没有指定 --enable-qm=1,则此选项会退回到与 AOM_DIST_METRIC_PSNR 相同的行为。
/*!\brief Distortion metric to use for RD optimization.
 *
 * Changes the encoder to use a different distortion metric for RD search. Note
 * that this value operates on a "lower level" compared to aom_tune_metric - it
 * affects the distortion metric inside a block, while aom_tune_metric only
 * affects RD across blocks.
 *
 */
typedef enum {
  // Use PSNR for in-block rate-distortion optimization.
  AOM_DIST_METRIC_PSNR,
  // Use quantization matrix-weighted PSNR for in-block rate-distortion
  // optimization. If --enable-qm=1 is not specified, this falls back to
  // behaving in the same way as AOM_DIST_METRIC_PSNR.
  AOM_DIST_METRIC_QM_PSNR,
} aom_dist_metric;

svc

  1. aom_svc_layer_id_t 结构体
    • 解释:空域和时域的层 ID
    • spatial_layer_id:表示空间层的ID。空间层ID用于区分不同的空间分辨率层。
    • temporal_layer_id:表示时间层的ID。时间层ID用于区分不同的帧率层。
/*!brief Struct for spatial and temporal layer ID */
typedef struct aom_svc_layer_id {
  int spatial_layer_id;  /**< Spatial layer ID */
  int temporal_layer_id; /**< Temporal layer ID */
} aom_svc_layer_id_t;
  1. aom_svc_params_t 结构体
    • 解释:svc 编码的参数类型配置
    • number_spatial_layers:表示空间层的数量。空间层允许视频在不同的分辨率下进行编码;libaom 设置空间层的最大值是MAX_NUM_SPATIAL_LAYERS,即 4。
    • number_temporal_layers:表示时间层的数量。时间层允许视频在不同的帧率下进行编码;最大值根据不同的libaom 版本有不同的设置,一般不超过 AOM_MAX_TS_LAYERS,即 8。
    • max_quantizers[AOM_MAX_LAYERS]:为每个层指定最大量化器。量化器控制编码的压缩率和质量;大小为AOM_MAX_LAYERS,即 32,即表示最大的层为 32,空间最大层为 4,那么时域最大层即为 8。
    • min_quantizers[AOM_MAX_LAYERS]:为每个层指定最小量化器;大小为AOM_MAX_LAYERS,即 32。
    • scaling_factor_num[AOM_MAX_SS_LAYERS]:表示空间层的缩放因子的分子;大小为AOM_MAX_SS_LAYERS,即 4。
    • scaling_factor_den[AOM_MAX_SS_LAYERS]:表示空间层的缩放因子的分母;大小为AOM_MAX_SS_LAYERS,即 4。
    • layer_target_bitrate[AOM_MAX_LAYERS]:为每一层设置的目标码率,单位是每秒kilobits,大小为AOM_MAX_LAYERS,即 32。
    • framerate_factor[AOM_MAX_TS_LAYERS]:为每个时域层设置的帧率因子,大小为AOM_MAX_TS_LAYERS,即 8。
/*!brief Parameter type for SVC
 *
 * In the arrays of size AOM_MAX_LAYERS, the index for spatial layer `sl` and
 * temporal layer `tl` is sl * number_temporal_layers + tl.
 *
 */
typedef struct aom_svc_params {
  int number_spatial_layers;                 /**< Number of spatial layers */
  int number_temporal_layers;                /**< Number of temporal layers */
  int max_quantizers[AOM_MAX_LAYERS];        /**< Max Q for each layer */
  int min_quantizers[AOM_MAX_LAYERS];        /**< Min Q for each layer */
  int scaling_factor_num[AOM_MAX_SS_LAYERS]; /**< Scaling factor-numerator */
  int scaling_factor_den[AOM_MAX_SS_LAYERS]; /**< Scaling factor-denominator */
  /*! Target bitrate for each layer, in kilobits per second */
  int layer_target_bitrate[AOM_MAX_LAYERS];
  /*! Frame rate factor for each temporal layer */
  int framerate_factor[AOM_MAX_TS_LAYERS];
} aom_svc_params_t;
  1. aom_svc_ref_frame_config_t 结构体
    • 解释:配置视频编码中的参考帧设置。
    • reference[7]:用于指示每个参考帧是否被使用。
      • reference[0]:last(最近编码的帧)
      • reference[1]:last2(第二近编码的帧)
      • reference[2]:last3(第三近编码的帧)
      • reference[3]:golden(关键帧或长期参考帧)
      • reference[4]:bwdref(反向参考帧)
      • reference[5]:altref2(替代参考帧2)
      • reference[6]:altref(替代参考帧)
    • ref_idx[7]:为上面每个参考帧指定缓冲区槽位索引。
    • refresh[8]:用于指示每个缓冲区槽位是否需要刷新。刷新通常意味着将当前帧的内容复制到参考帧缓冲区中。
/*!brief Parameters for setting ref frame config */
typedef struct aom_svc_ref_frame_config {
  // 7 references: The index 0 - 6 refers to the references:
  // last(0), last2(1), last3(2), golden(3), bwdref(4), altref2(5), altref(6).
  int reference[7]; /**< Reference flag for each of the 7 references. */
  /*! Buffer slot index for each of 7 references indexed above. */
  int ref_idx[7];
  int refresh[8]; /**< Refresh flag for each of the 8 slots. */
} aom_svc_ref_frame_config_t;
  1. aom_svc_ref_frame_comp_pred_t 结构体
    • 解释:svc 编码中参考帧复合预测设置参数
    • use_comp_pred[0]:指示是否使用 GOLDEN_LAST 参考帧对,通常指的是关键帧(Golden Frame)和最近编码的帧(Last Frame)。
    • use_comp_pred[1]:指示是否使用 LAST2_LAST 参考帧对,指的是两个连续的最近编码的帧。
    • use_comp_pred[2]:指示是否使用 ALTREF_LAST 参考帧对,指的是一个替代参考帧(通常用于平滑场景变化)和最近编码的帧。
/*!brief Parameters for setting ref frame compound prediction */
typedef struct aom_svc_ref_frame_comp_pred {
  // Use compound prediction for the ref_frame pairs GOLDEN_LAST (0),
  // LAST2_LAST (1), and ALTREF_LAST (2).
  int use_comp_pred[3]; /**<Compound reference flag. */
} aom_svc_ref_frame_comp_pred_t;
  1. AOM_SVC_FRAME_DROP_MODE 枚举
    • 解释:空域/质量域层 svc 的帧丢弃模式
    • AOM_LAYER_DROP:表示任何空间层都可以丢弃帧。在这种模式下,编码器可以基于当前的网络条件或资源状况,选择丢弃某个空间层的帧。
    • AOM_FULL_SUPERFRAME_DROP:表示只有完整的超帧(superframe)可以被丢弃。超帧是一组帧的集合,它们一起编码以实现更好的编码效率。在这种模式下,编码器不会丢弃超帧中的单个帧,而是选择丢弃整个超帧。
/*!brief Frame drop modes for spatial/quality layer SVC */
typedef enum {
  AOM_LAYER_DROP,           /**< Any spatial layer can drop. */
  AOM_FULL_SUPERFRAME_DROP, /**< Only full superframe can drop. */
} AOM_SVC_FRAME_DROP_MODE;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码流怪侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值