AV1技术学习:Coding Structure

一、SuperBlock

SuperBlock 是AV1编解码器可以处理的最大编码块。SuperBlock 大小可以是128 × 128 或64 × 64,由 sequence header 控制。SuperBlock 可以进一步划分为更小的编码块,每个编码块都有自己的预测和变换模式。SuperBlock 编码只依赖于它的上侧和左侧的 SuperBlock。

二、 Tile

Tile 是由 SuperBlock 组成的矩形数组,其空间参考(包括帧内参考和概率模型更新)被限制在 Tile 边界内。因此,Tile 内的块可以独立编码,这为编码器和解码器实现提供了简单而有效的多线程。

最小 Tile 尺寸是一个 SuperBlock,最大 Tile 宽度对应4096个亮度像素,最大 Tile 大小对应4096×2304。一个帧最多允许512个 Tiles。

AV1支持两种方式来指定每个帧的 Tile 大小。第一种方式支持一帧内的全部 Tile 都具有相同的尺寸(除了位于帧的底部和右侧边界的 Tile)。AV1 允许传输垂直和水平的 Tile 数目,并根据帧大小推导 Tile 的尺寸。第二种方式支持不均匀的 Tile 大小,Tile 在垂直和水平方向上的间距都是不均匀的,并且必须在比特流中以 SuperBlock 为单位指定 Tile 的尺寸。此设计是由于视频信号统计的变化,在一个帧内不同的 SuperBlock 的计算复杂度是不同的。非统一的块大小选项允许在需要较高计算复杂度的区域使用较小的块大小,从而平衡线程之间的工作负载。在多核方面有足够的计算资源并且需要最小化帧编码延迟时,这尤其有用。下图提供了一个两种 Tile 的例子。

均匀/不均匀的 Tile 大小选项和 Tile 的大小是在逐帧的基础上决定的。值得注意的是,后处理滤波器在 Tile 边界上应用,以避免沿着 Tile 边缘的潜在编码伪影(例如块效应)。

三、Coding Block Partitioning

SuperBlock 可以递归地划分为更小的块大小以进行编码。AV1 继承了 VP9 中使用的递归块划分设计。为了减少对高度相关的视频信号进行预测模式编码的开销,AV1支持128 × 128亮度像素的最大编码块大小,这种情况通常出现在 4k 视频中。每个块级别允许的划分包括 10 种划分模式,如下图所示。为了提高复杂视频的预测质量,将最小编码块大小扩展到4×4亮度像素。虽然这些扩展提供了更多的编码灵活性,但它们对硬件解码器有影响。某些块大小相关的约束是专门设计来避免这种复杂度的。

1. Block Size-Dependent Constraints

硬件解码器中的核心计算单元通常是围绕 SuperBlock 设计的。将 SuperBlock 大小从 64 × 64 增加到 128 × 128 将需要核心计算单元大约四倍的硅面积。为了解决这个问题,将解码操作限制为64 × 64 单元,即使对于更大的块大小也是如此。例如,要解码YUV420格式的128 × 128块,需要解码对应于第一个64 × 64块的亮度和色度分量,然后是对应于下一个64 × 64块的亮度和色度分量,以此类推,而不是处理整个128 × 128块的亮度分量、色度分量。这种约束有效地重新安排了亮度和色度分量的熵编码顺序,并且对压缩性能没有影响。它允许硬件解码器将128 × 128块处理为一系列 64 × 64 块,因此保留相同的硅面积

另一个,4×4编码块的使用增加了 YUV420 格式中的最坏情况延迟,当所有编码块都是4×4亮度像素并使用帧内预测模式编码时,就会发生这种情况。为了重建一个帧内编码块,需要等待它的左侧和上方相邻像素完全重建,以用作参考像素。在 VP9 中,亮度 8 × 8 块内的 4 × 4 亮度像素都是用帧间或者帧内模式编码的。如果是帧内模式,则其对应的 4x4 色度分量将使用帧内色度预测模式,并进行变换。不受约束的 4× 4 编码块大小将要求每个 2 × 2 色度像素进行预测和变换编码,色度分量解码过程中存在依赖性。请注意,帧间预测模式不存在这样的空间依赖问题。

AV1采用 YUV420 格式的4 × 4块约束色度分量编码来解决延迟问题。如果一个 8×8 块内的所有亮度块都是帧间模式,则使用相应亮度块的运动信息以 2 × 2 单位预测色度分量。如果所有亮度块都是帧内预测模式,则色度分量将使用右下角的 4 × 4 亮度块的编码模式,以4 × 4为单位进行预测,然后对色度分量的预测残差进行4 × 4变换。

这些与块大小相关的约束使编码块划分模式的扩展对硬件可行性的影响有限。然而,为了将这种增加的灵活性转化为压缩收益,需要进行率失真优化搜索。

2. Two-Stage Block Partitioning Search

观察到可变编码块大小的关键灵活性是由遍历方形编码块的递归划分提供的,一种可能性是采用两阶段分区搜索方法。第一轮是从最大编码块大小开始,仅通过正方形划分。对于每个编码块,率失真搜索是有限的,例如,只使用最大的变换块和二维DCT核。通过分析其划分决策,可以确定最可能的操作范围,在此范围内,第二次块划分搜索将对所有10个可能的划分进行广泛的率失真优化搜索。改变从第一次块划分结果中得出的允许的块大小搜索范围将在压缩性能和编码速度之间做出不同的权衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/381684.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【jmeter边界值提取器】

【目的】 从响应头中取token的内容 【方案】 使用后置处理器-边界值提取器 【组件路径】HTTP请求->右键添加->后置处理器->边界提取器 用途:边界提取器(Boundary Extractor)是放在Sample请求之后执行的,用于获取左右边界中间的所有字符&#xf…

Anaconda下安装配置Jupyter

Anaconda下安装配置Jupyter 1、安装 conda activate my_env #激活虚拟环境 pip install jupyter #安装 jupyter notebook --generate-config #生成配置文件提示配置文件的位置: Writing default config to: /root/.jupyter/jupyter_notebook_config.py检查版本&am…

指针!!C语言(第二篇)

目录 一. 数组名的理解 二. 一维数组传参的本质 三. 冒泡排序法 四. 二级指针与指针数组 五. 字符指针变量与数组指针 一. 数组名的理解 在我们对指针有了初步的理解之外,今天我们来掌握一些新的知识就是数组与指针,第一个对数组名的了解&#xff…

基于R语言复杂数据回归与混合效应模型【多水平/分层/嵌套】技术与代码

回归分析是科学研究特别是生态学领域科学研究和数据分析十分重要的统计工具,可以回答众多科学问题,如环境因素对物种、种群、群落及生态系统或气候变化的影响;物种属性和系统发育对物种分布(多度)的影响等。纵观涉及数…

excel批量新建多个同类型的表格

背景引入 比如,一个企业有多个部门,现在需要按照某一个excel表模板收集各个部门的信息,需要创建数十个同类型表格,且标题要包含部门名称。 1.修改模板表格标题 在一个文件夹下面放入需要发放给各个部门的表格,将标题…

初识godot游戏引擎并安装

简介 Godot是一款自由开源、由社区驱动的2D和3D游戏引擎。游戏开发虽复杂,却蕴含一定的通用规律,正是为了简化这些通用化的工作,游戏引擎应运而生。Godot引擎作为一款功能丰富的跨平台游戏引擎,通过统一的界面支持创建2D和3D游戏。…

Dav_笔记10:Using SQL Plan Management之1

SQL计划基准概述 SQL计划管理是一种预防机制,可以记录和评估SQL语句的执行计划。此机制可以构建SQL计划基准,这是一组SQL语句的已接受计划。已接受的计划已被证明表现良好。 SQL计划基准的目的 SQL计划基准的目标是保持相应SQL语句的性能,…

函数的参数

函数的参数 函数的参数可以增加函数的通用性 # 没有函数参数的函数 def num_add():a 1b 2return a bs1 num_add() print(s1) # 局限性:只可以计算两个数字的和,无法实现具有较高的通用性# 没有函数参数的函数 def num_add(a, b):return a bs num…

idea如何让包结构分层

文章目录 前言1.选中前项目包结构2.取消后项目包结构3.情况二 前言 在大型项目中,代码的分层管理至关重要。IDEA编辑器提供了强大的package分层结构功能,帮助开发者更好地组织和管理代码。通过合理配置,我们可以清晰地看到各个package之间的…

浏览器打开抽奖系统html

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>在线抽奖 随机选取 自动挑选</title> <script src"https://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <style> body {…

CrowdStrike更新致850万Windows设备宕机,微软紧急救火!

7月18日&#xff0c;网络安全公司CrowdStrike发布了一次软件更新&#xff0c;导致全球大范围Windows系统宕机。 预估CrowdStrike的更新影响了将近850万台Windows设备&#xff0c;多行业服务因此停滞&#xff0c;全球打工人原地放假&#xff0c;坐等吃瓜&#xff0c;网络上爆梗…

GPT盘新增容量后如何扩容?

场景&#xff1a;一块5T的GPT盘&#xff0c;现有需求再加10T&#xff0c; 在虚拟化平台加10T盘后&#xff0c;机器不重启&#xff0c;执行命令 echo 1 > /sys/block/sdb/device/rescan刷新磁盘容量&#xff0c;可看到容量已刷出。 但执行fdisk /dev/sdb时&#xff0c;发现创…

【Django5】模板引擎

系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理&#xff08;Cookies&Session&#xff09; 第八章 文件上传…

鸿蒙 动态共享包HSP的创建和引用

1.什么是动态共享包HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0c;与宿主应…

QXlsx读写excel

QXlsx读写excel 安装 QXlsx使用 qmake使用 CMake 基本用法1. 写入 Excel 文件2. 读取 Excel 文件 详细用法1. 设置单元格样式2. 合并单元格3. 创建图表4. 设置列宽和行高 完整示例 QXlsx 是一个用于在 Qt 应用中读写 Excel 文件的第三方库。它提供了丰富的 API&#xff0c;可以…

Kafka之存储设计

文章目录 1. 分区和副本的存储结构1. 分区和副本的分布2. 存储目录结构3. 文件描述 2. 相关配置3. 数据文件类型4. 数据定位原理LogSegment 类UnifiedLog 类 5. 副本数据同步HW水位线LEO末端偏移量HW更新原理 6. 数据清除 1. 分区和副本的存储结构 在一个多 broker 的 Kafka 集…

首批通过 | 百度通过中国信通院H5端人脸识别安全能力评估工作

2024年5月&#xff0c;中国信息通信研究院人工智能研究所依托中国人工智能产业发展联盟安全治理委员会&#xff08;AIIA&#xff09;、“可信人脸应用守护计划”及多家企业代表共同开展《H5端人脸识别线上身份认证安全能力要求及评估方法》的编制工作&#xff0c;并基于该方法开…

Linux_线程的同步与互斥

目录 1、互斥相关概念 2、代码体现互斥重要性 3、互斥锁 3.1 初始化锁 3.2 申请、释放锁 3.3 加锁的思想 3.4 实现加锁 3.5 锁的原子性 4、线程安全 4.1 可重入函数 4.2 死锁 5、线程同步 5.1 条件变量初始化 5.2 条件变量等待队列 5.3 唤醒等待队列…

【openGL】阴影映射问题:shadow acne(阴影失真)和peter panning(阴影悬浮)

【openGL】阴影映射问题&#xff1a;shadow acne&#xff08;阴影失真&#xff09;和peter panning&#xff08;阴影悬浮&#xff09; 1.《Learn Opengl》第35章中提到&#xff0c;一般在按照光线投射产生深度贴图的做法做阴影映射时&#xff0c;会出现摩尔纹&#xff0c;这种…

浏览器插件利器--allWebPluginV2.0.0.16-beta版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…