AV1代码学习5:函数av1_encode_strategy

av1_encode_strategy函数涉及AV1编码的高级策略,包括选择帧类型。它使用choose_frame_source决定是否对原始帧进行时域滤波,并可能使用LAST帧或从lookahead获取。show_existing_frame标志表示帧已编码,tpl_model在二次编码中用于优化成本。av1_configure_buffer_updates更新参考帧信息,影响LAST_FRAME和KEY_FRAME的行为。该函数后续调用av1_encode。
摘要由CSDN通过智能技术生成

函数av1_encode_strategy会执行一些high-level的编码策略,包括选择帧的类型等。其中函数choose_frame_source,会根据当前帧是否为ARF or internal ARF,来对原始帧进行时域滤波,如果不是则用LAST代替或者从lookahead从得到。

show_existing_frame代表这一帧已经编码过.

tpl_model在第二次编码才会使用,是通过Look-ahead的方式记录inter和intra的cost, 通过类似MB-Tree的方法对实际编码的QP和lambda进行调整以提高性能。

 av1_configure_buffer_updates,用于更新参考帧类型的数据,比如对于LAST_FRAME, 会被初始化为   

      case LF_UPDATE:
      frame_params->refresh_last_frame = 1;
      frame_params->refresh_golden_frame = 0;
      frame_params->refresh_bwd_ref_frame = 0;
      frame_params->refresh_alt2_ref_frame = 0;
      frame_params->refresh_alt_ref_frame = 0;

而KEY_FRAME会把const int force_refresh_all设为1 ,结果就变成了

  if (force_refresh_all) {
    frame_params->refresh_last_frame = 1;
    frame_params->refresh_golden_frame = 1;
    frame_params->refresh_bwd_ref_frame = 1;
    frame_params->refresh_alt2_ref_frame = 1;
    frame_params->refresh_alt_ref_frame = 1;
  }

函数的下一个入口是av1_encode

int av1_encode_strategy(AV1_COMP *const cpi, size_t *const size,
                        uint8_t *const dest, unsigned int *frame_flags,
                        int64_t *const time_stamp, int64_t *const time_end,
                        const aom_rational64_t *const timestamp_ratio,
                        int flush) {
  const AV1EncoderConfig *const oxcf = &cpi->oxcf;
  AV1_COMMON *const cm = &cpi->common;

  EncodeFrameInput frame_input;
  EncodeFrameParams frame_params;
  EncodeFrameResults frame_results;
  memset(&frame_input, 0, sizeof(frame_input));
  memset(&frame_params, 0, sizeof(frame_params));
  memset(&frame_results, 0, sizeof(frame_results));

  if (oxcf->pass == 0 || oxcf->pass == 2) {
    check_show_existing_frame(cpi, &frame_params);
    frame_params.show_existing_frame &= allow_show_existing(cpi, *frame_flags);
  } else {
    frame_params.show_existing_frame = 0;
  }

  int temporal_filtered = 0;
  struct lo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值