AV1:编码块划分

2024-03-13 02:36
文章标签 编码 划分 av1

本文主要是介绍AV1:编码块划分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

​AV1是AOM于2018年发布的一代视频编码标准,相比于VP9其编码效率提升30%,相对于H.26X系列标准,AV1完全免去专利费可以自由使用。

AV1和其他视频编码标准类似,也采用基于块的编码架构。当编码器读进一帧图像,首先将其划分为互不重叠的super block(SB),然后对SB进一步划分编码。

Super Block


SB是AV1中的最大编码单元,类似于HEVC中的CTU,在AV1中SB的尺寸可以是128x128或64x64,由sequence header中的语法元素use_128x128_superblock指定

SB可以进一步划分,类似于HEVC中的CTU划分为CU,亮度划分块的尺寸从128x128到4x4(色度最小到4x4)。AV1支持10种划分模式,

图1 AV1编码块划分方式

图1是AV1编码块支持的10种划分方式,其中R表示可以递归划分,可见AV1的矩形划分块不能再进行子划分,只有QT划分能进行子划分。

图2 AV1具体划分模式

除PARTITION_NONE外,AV1支持的9种划分模式具体如图2,可以分为三类,第一类4子块划分包括PARTITION_SPLIT, PARTITION_VERT_4, PARTITION_HORZ_4,第二类3子块划分(T-Shape)包括PARTITION_HORZ_A, PARTITION_HORZ_B, PARTITION_VERT_A, PARTITION_HORZ_B ,第三类2子块划分包括PARTITION_HORZ, PARTITION_VERT 。对于8x8和128x128块不允许使用PARTITION_VERT_4 ,PARTITION_HORZ_4 划分。且对于8x8块还不能使用T-Shape划分。
Tile


AV1中的Tile划分和HEVC类似,用于提升编码的并行效率,不同Tile之间互不依赖。

图3 AV1的Tile划分

如图3,Tile就是将图像划分为一些矩形区域,每个区域内包含一些SB块。图像中每个Tile相互独立,各自编码。AV1规定最小的Tile可以只包含一个SB,最大的Tile宽度不超过4096,尺寸不超过4096x2304,一帧图像最多有512个Tile。

参考


  1. https://aomedia.org/

  2. https://aomedia.googlesource.com/aom/

  3. J. Han et al., "A Technical Overview of AV1," in Proceedings of the IEEE, vol. 109, no. 9, pp. 1435-1462, Sept. 2021, doi: 10.1109/JPROC.2021.3058584.

  4. Y. Chen et al., "An Overview of Core Coding Tools in the AV1 Video Codec," 2018 Picture Coding Symposium (PCS), San Francisco, CA, USA, 2018, pp. 41-45, doi: 10.1109/PCS.2018.8456249. 

这篇关于AV1:编码块划分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/803387

相关文章

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

Thread如何划分为Warp?

1 .Thread如何划分为Warp? https://jielahou.com/code/cuda/thread-to-warp.html  Thread Index和Thread ID之间有什么关系呢?(线程架构参考这里:CUDA C++ Programming Guide (nvidia.com)open in new window) 1维的Thread Index,其Thread

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {