AV1代码学习6:tpl_model之二

本文深入探讨AV1编码中模式估计的过程,包括帧内预测的DC模式、角度模式和PAETH模式,以及帧间预测对7个参考帧的遍历,寻找最优运动矢量和参考帧。同时,介绍了tpl_stats结构如何存储块信息以供后续计算使用。
摘要由CSDN通过智能技术生成

mode_estimation字面意思就是模式估计,实质上是对帧内和帧间的模式进行遍历。帧内预测选取了13种模式,主要是DC模式、角度模式和新加入的PAETH模式。帧间对7个参考帧进行遍历,寻找COST最优的块,并记录下运动矢量和参考帧编号。tpl_stats是用来存储当前块的各种信息,包含上述的变量,以便在后续调用函数时使用。

static void mode_estimation(AV1_COMP *cpi, MACROBLOCK *x, MACROBLOCKD *xd,
                            struct scale_factors *sf, int frame_idx,
                            int16_t *src_diff, tran_low_t *coeff, int use_satd,
                            int mi_row, int mi_col, BLOCK_SIZE bsize,
                            TX_SIZE tx_size, YV12_BUFFER_CONFIG *ref_frame[],
                            uint8_t *predictor, TplDepStats *tpl_stats) {
  AV1_COMMON *cm = &cpi->common;
  const GF_GROUP *gf_group = &cpi->twopass.gf_group;

  const int bw = 4 << mi_size_wide_log2[bsize];
  const int bh = 4 << mi_size_high_log2[bsize];
  const int pix_num = bw * bh;//因为是16×16的块,所有像素数量是256
  const InterpFilters kernel =
      av1_make_interp_filters(EIGHTTAP_REGULAR, EIGHTTAP_REGULAR);

  int64_t best_intra_cost = INT64_MAX;
  int64_t intra_cost;
  PREDICTION_MODE mode;
  //偏移值,定位16×16块的左上角
  int mb_y_offset = mi_row * MI_SIZE * xd->cur_buf->y_stride + mi_col * MI_SIZE;

  memset(tpl_stats, 0, sizeof(*tpl_stats));

  xd->above_mbmi = NULL;
  xd->left_mbmi = NULL;
  xd->mi[0]->sb_type = bsize;
  xd->mi[0]->motion_mode = SIMPLE_TRANSLATION
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值