美文网首页
AV1 Encoder源码剖析(三)

AV1 Encoder源码剖析(三)

作者: yongbaoqiji | 来源:发表于2023-12-21 17:04 被阅读0次

本文就文AV1 Encoder源码剖析(二)的Encode流程继续深挖。

3. AV1编码流程

……

3.5 av1_encode_sb_row

av1_encode_sb_row

av1_encode_sb_row主要完成遍历Tile中不同Superblock的编码。具体执行Superblock编码的是encode_nonrd_sd和encode_rd_sb函数。

主要包含:

  • encode_sb_row()开始执行Superblock partition搜索,分两种情况:
    (1)encode_nonrd_sb()用来执行1-passreal-time模式下的分区搜索。通过一个预定义的partition划分来编码一个superblock,同时仅允许最小化的率失真(minor rd-based)搜索来微调初始化的分区模式。.具体实现是调用av1_nonrd_use_partition。
    (2)encode_rd_sb()用来执行比较完整和耗时的率失真(rd-based)搜索,具体实现是调用av1_rd_use_partition/av1_rd_pick_partition。
    (3)av1_nonrd_use_partitionav1_rd_pick_partition都基于递归四叉树(quad-tree)去实现分区搜索(Partition Search)并返回最佳的子树 (sub-trees)区域划分给到他们的父分区。

3.6 av1_rd_use_partition

PARTITION_TYPES
这里先简单插入下关于帧内帧间预测的介绍:
帧内预测:
AV1提供了71中不同的帧内预测模式,帧内预测是仅需依赖当前帧而不需依赖参考帧的方式。
对于只包含帧内预测的关键帧,仅需考虑自身不同帧内预测模式搜索过程的率失真值。
但即使如此,对于每个块和partition分区搜索所有的帧内预测模式仍然是不切合实际的,因此做一些剪枝搜索是必要的。
帧间预测:
对于帧间预测,需要参考一个或者多个已编码帧或arf帧,划分分区搜索量是巨大的。除去71种帧内搜索,还需要考虑单参考帧帧间参考56种模式,如果是两帧帧间参考就需要12768种模式,36708种帧内帧间混合模式。可见,工作量巨大。

如下是,Partition划分的不同模式定义。

partition划分并不是一个独立的模块,依赖到帧内/帧间预测/变换了,这两者是紧密结合块来进行的。下面是基于RD的分区划分实现:


partition
  • pick_sb_modes()将partition搜索同帧内(av1_rd_pick_intra_mode_sb)和帧间(av1_rd_pick_inter_mode)结合起来。
  • encode_sb()作用是重建块,为不同划分模式选择做决策。
  • av1_rd_pick_intra_mode_sb实现基于RD的帧内预测控制逻辑,av1_nonrd_pick_intra_mode为更偏向速度的帧内预测。
  • av1_rd_pick_inter_mode_sb_time实现基于RD的帧间预测控制逻辑,av1_nonrd_pick_inter_mode_sb为更偏向速度的帧间预测。

接下来的编码流程分析将在AV1 Encoder源码分析(四)中介绍。

未经声明,禁止转载,喜欢的给个赞吧!

相关文章

网友评论

      本文标题:AV1 Encoder源码剖析(三)

      本文链接:https://www.haomeiwen.com/subject/qngtndtx.html