AV1 编码标准屏幕内容编码技术概述

news2024/9/23 3:22:17

AV1 屏幕内容编码

为了提高屏幕捕获内容的压缩性能,AV1采用了几种编码工具,例如用于处理屏幕画面中重复模式的内帧内块复制(IntraBC),以及用于处理颜色数量有限的屏幕块的调色板模式。

帧内块拷贝

AV1 编码中的 Intra Block Copy (IntraBC) 是一种专门设计用于提高屏幕内容编码效率的工具。对IntraBC 工作原理及其在硬件设计中考虑的详细分析:

  1. 块向量 (Block Vector, BV):

    • IntraBC 使用一个向量(BV)来指示同一图像中当前块的预测块。这种向量可以在比特流中进行信号传输。
  2. BV 的精度:

    • BV 的表示精度为整数点,这意味着它不包含小数部分。
  3. 预测过程:

    • IntraBC 模式下的预测过程类似于跨图像预测模式,但主要区别在于:
      • IntraBC:预测块是从当前图像中形成的,且在应用循环滤波器之前。
      • 跨图像预测:预测块是从先前编码的图像的重建样本中形成的,且在应用循环滤波器之后。
  4. 编码标志:

    • 在编码当前块之前,首先信号一个标志,指示是否使用 IntraBC。
  5. BV 差值计算:

    • 如果标志指示使用 IntraBC,则计算当前 BV 与预测 BV 的差值,并将差值分类为四种类型之一:
      1. 水平和垂直分量都为零。
      2. 水平分量非零,垂直分量为零。
      3. 水平分量为零,垂直分量非零。
      4. 水平和垂直分量都非零。
  6. BV 类型信息:

    • 信号 BV 类型信息,然后是 BV 差值。
  7. 硬件设计挑战:

    • IntraBC 虽然对编码屏幕内容非常有效,但对硬件设计提出了一些挑战。
  8. 循环滤波器禁用:

    • 使用 IntraBC 时,禁用所有循环滤波器(包括去块、CDEF 和 LR 滤波器)。这样做可以避免需要专用的第二图像缓冲区来启用 IntraBC。
  9. 预测区域限制:

    • 为了便于并行解码,限制了允许的预测区域。具体来说,如果一个超块的左上角像素坐标为 (x0, y0),只有在垂直坐标 y 小于 y0 且水平坐标 x 小于 x0 + 2(y0 − y) 时,IntraBC 预测才可用。
  10. 硬件写回延迟:

    • 由于硬件写回延迟,最近的重建区域可能无法立即用于 IntraBC 预测,这可能包含一个或多个超块。因此,进一步限制了允许的 IntraBC 预测区域:
      • 如果一个超块的左上角像素坐标为 (x0, y0),只有在垂直坐标 y 小于 y0 且水平坐标 x 小于 x0 + 2(y0 − y) − D 时,IntraBC 预测才可用,其中 D 表示从当前块左侧开始的水平方向上的像素数。
  11. D 的值:

    • 在 AV1 中,D 被设置为超块宽度的两倍,即 256 像素。
  12. 图示参考:

    • 下图展示了 IntraBC 预测区域。
      在这里插入图片描述

总结来说,IntraBC 是 AV1 中一种强大的工具,特别适合处理屏幕捕获内容中的重复模式。通过在当前图像内进行“运动补偿”,它能够显著减少编码这些区域所需的比特数。然而,为了在硬件中实现 IntraBC,需要进行一些调整,以确保解码过程的并行性和效率。通过禁用循环滤波器和限制预测区域,AV1 能够在保持高效编码的同时,简化硬件设计。

调色板模式

AV1 编码中的调色板模式(Palette mode)是一种用于提高压缩效率的技术,特别适用于当前块使用 DC_PRED 预测模式进行帧内编码(intra coding)的情况。以下是对调色板模式的分析:

  1. 应用条件

    • 调色板模式可以在亮度(luma)和色度(chroma)块上应用。
    • 仅当块的尺寸大于或等于 8×8 像素,并且宽度和高度都不超过 64 像素时,才能应用调色板模式。
  2. 语法元素信号

    • 启用调色板模式时,会信号几个语法元素,包括:
      • has_palette_y:指示是否对当前编码块应用调色板模式的标志。
      • palette_size_y_minus_2:指定调色板大小的语法元素,实际大小为该值加 2。
      • use_palette_color_cache_y:指示是否为调色板的每个条目继承颜色索引的标志。
  3. 颜色索引继承

    • 如果继承的调色板条目数量少于信号的调色板大小,则剩余的颜色索引将被显式地信号传输。
  4. 色度组件共享

    • 对于色度分量,has_palette_uvpalette_size_uv_minus_2 在两个色度颜色组件(Cb 和 Cr)之间共享。
    • 但是,Cb 和 Cr 的调色板中的颜色索引是分别信号传输的。
  5. 编码顺序

    • 调色板模式编码的块中的颜色索引按照对角线扫描顺序进行信号传输和编码。
    • 扫描从右上角开始,到左下角结束。
  6. 熵编码上下文

    • 当前块的第一个颜色索引使用单独的语法 color_index_map_y 进行编码。
    • 剩余的索引使用它们的上一个(top)、左一个(left)和左上一个(top-left)邻近索引作为熵编码的上下文信息。
  7. 对角线扫描优化

    • 这种对角线扫描方法有助于利用图像的空间相关性,尤其是在图像块中颜色变化不大的情况下。
  8. 编码效率

    • 通过减少表示图像块中颜色变化所需的比特数,调色板模式可以显著提高编码效率。
  9. 图示参考

    • 下图展示了调色板模式编码的对角线扫描顺序。
      在这里插入图片描述

总结来说,AV1 编码中的调色板模式通过限制颜色索引的数量,并按照特定的对角线扫描顺序进行编码,有效地压缩了颜色变化有限的图像区域。这种方法特别适合屏幕内容和动画等颜色种类有限的场景,有助于减少编码后视频的数据量,同时保持图像质量。

屏幕内容类型检测

AV1 编码标准中,帧级内容类型检测是一种智能机制,用于在编码每一帧之前分析帧的特性,并决定是否启用特定的编码工具来优化屏幕内容的编码。分析如下:

  1. 帧级内容类型检测

    • 在编码每一帧之前,AV1 可以启用内容类型检测,分析当前输入帧的特性。
  2. 分析目的

    • 检测过程旨在判断当前帧是否可能包含屏幕内容,如文本、图形用户界面等。
  3. 编码工具启用

    • 根据内容类型检测的结果,可能会启用屏幕内容编码工具,如 IntraBC(内部块复制)和调色板模式。
  4. 检测过程描述

    • 使用两个计数器 counter1counter2 来辅助决策。
  5. 16x16 亮度块分析

    • 对当前帧的每个 16x16 亮度块进行分析。如果一个块中只有 2、3 或 4 个不同的亮度值,这表明该块可能包含重复或有限的颜色,这在屏幕内容中很常见。
  6. 更新 counter1

    • 如果一个 16x16 亮度块符合上述条件,counter1 增加 1。
  7. 方差计算

    • 计算每个符合条件的 16x16 亮度块的方差。
  8. 更新 counter2

    • 如果方差大于预定义的阈值,counter2 增加 1。这表明块内的颜色变化超出了一定范围,可能意味着存在边缘或文本。
  9. 调色板模式启用条件

    • 处理完所有亮度块后,使用 counter1FrameWidth×FrameHeight/2560 的比值来决定是否启用调色板模式。这个比值是一个经验公式,用于确定帧中有限颜色区域的比例是否足够高,从而使得调色板模式有利。
  10. IntraBC 启用条件

    • 类似地,使用 counter2FrameWidth×FrameHeight/3072 的比值来决定是否启用 IntraBC。这个比值也是一个经验公式,用于确定帧中存在显著变化区域的比例是否适合使用 IntraBC。
  11. 决策依据

    • 这些计数器的值提供了一种量化的方法来判断帧内容的特性,并据此选择最合适的编码工具。
  12. 灵活性

    • 这种方法允许编码器根据每一帧的实际内容动态选择使用这些工具,以实现最佳的压缩效率。

总结来说,AV1 编码中的内容类型检测是一种动态决策机制,通过分析帧的局部特性来做出全局的编码决策,从而优化屏幕内容的编码。这种方法特别适合于屏幕捕获和其他具有特定模式的视频内容,能够提高编码效率和适应性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue】快速入门:构建你的第一个Vue 3应用

文章目录 一、Vue简介二、环境搭建1. 安装Node.js和npm2. 安装Vue CLI 三、创建Vue项目四、项目结构介绍五、组件基础创建一个组件使用组件 六、模板语法插值指令v-bindv-ifv-for 七、事件处理八、状态管理安装Vuex创建Store使用Store 九、路由基础安装Vue Router配置路由使用路…

FFmpeg播放视频

VS2017+FFmpeg6.2.r113110+SDL2.30.5 1.下载 ShiftMediaProject/FFmpeg 2.下载SDL2 3.新建VC++控制台应用 3.配置include和lib 4.把FFmpeg和SDL的dll 复制到工程Debug目录下,并设置调试命令

24年Hvv准备,6大方向,33篇技战法

进去不少小伙伴后台留言说需要技战法,因此小编对市面上的技战法进行了收集和总结,并对收集来的技战法进行了分类,总共分了6大类,共计33篇: 有需要的小伙伴关注我,点击在看,并私信回复“技战法”…

IO、进程、线程03

第一题&#xff1a;预习 opendir 和 readdir函数 opendir 和 readdir 是两个在C语言&#xff08;特别是使用POSIX标准的系统&#xff0c;如Linux和UNIX&#xff09;中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分&#xff0c;通常与<dirent.h>头文件一…

MySQL学习记录 —— 이십일 MySQL服务器文件系统(1)

文章目录 1、配置和默认值2、系统变量和选项1、介绍2、常用选项3、如何使用系统变量 3、常用服务器配置4、查看状态变量5、MySQL数据目录 mysql的服务端就是mysqld&#xff0c;d就是daemon&#xff0c;守护进程的意思。 配置文件中[mysqld]部分时服务器支持的启动选项。服务器…

某航空制造业集团IT信息化总体规划方案

获取完整方案见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取&#xff0c;请见下图

开放式耳机哪个品牌好?开放式耳机实用推荐

开放式耳机是一种耳机类型&#xff0c;其外壳是开放的&#xff0c;发声单元的背面和外界相通。这种耳机的外壳上通常有许多小孔或者直接能够看到内部的发声单元。 而且开放式耳机几乎摒弃了传统耳机几乎所有缺点&#xff01;&#xff01; ❌有线耳机&#xff1a;运动的时候特别…

如何走出低能量状态?

晚上好。 每个人都难免会有状态不佳的时候。可能是遭受压力&#xff0c;可能是事情不顺&#xff0c;也可能无缘无故、突然就陷入情绪的低谷之中。 这时&#xff0c;我们很容易感到精力不济&#xff0c;无精打采&#xff0c;明明有许多事情要做和想做&#xff0c;但总是提不起精…

宠物空气净化器哪款品牌好?口碑好的猫用空气净化器排名

猫咪每年掉毛两次&#xff0c;一次掉半年的现象真让人头疼。作为一位5年资深铲屎官&#xff0c;特别是在掉毛季节&#xff0c;猫毛无处不在&#xff0c;对此深有体会。宠物空气净化器已成为铲屎官们的救星&#xff0c;能迅速清理家中的宠物毛发和异味&#xff0c;是养猫家庭的必…

RK3568平台(环境篇)windon与ubuntu之间文件互传

一.windon与ubuntu共享文件夹 打开设置&#xff1a; 点击选项&#xff0c;共享文件夹 共享文件夹&#xff0c;就是在电脑的固定盘符下面&#xff0c;找一个文件夹为Windows和Linux都能看得见的共用的看得见的文件夹&#xff0c;点击添加文件夹。 点击确定后在ubuntu添加共享文…

python 获取Shopee虾皮商家店铺商品列表 虾皮api数据采集

此api接口可用于获取虾皮平台商家店铺的商品列表&#xff0c;目前land参数支持id、vn、my、th、sg、ph、tw&#xff08;印尼、越南、马来、泰国、新加坡、菲律宾、台湾&#xff09;。 若有需要&#xff0c;请点击文末链接联系我们。 详细采集页面如下https://shopee.tw/yuesh…

【快速逆向一/无过程/有源码】《大学》在线投稿系统

逆向日期&#xff1a;2024.07.18 使用工具&#xff1a;Node.js 加密工具&#xff1a;Crypto-js标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 【点赞 收藏 关注 】仅供学习&#xff0c;仅供学习&#xff0c; 本文为快速逆向&#x…

IC测试:Shmooing, Shmoo测试, Shmoo图

Shmoo测试/Shmooing 在半导体测试中&#xff0c;Shmooing是一种测试技术&#xff0c;通过扫描一个范围内的测试条件参数来查看正在运行的被测器件&#xff0c;就像它在现实世界中的表现一样。 测试的参数类型取决于IC的目的和类型以及环境。至少绘制了两个参数。&#xff08;…

鸿蒙仓颉语言【基础-数据类型dataType】

数据类型 仓颉编程&#xff08;CangjieLang&#xff09;是强类型语言,变量和函数参数都需要显式声明类型&#xff0c;例如&#xff1a; public let growable: Bool false public func get(value: Array<Byte>): Int64。基础数据类型 仓颉&#xff08;CangjieLang&…

生命周期的妙用——Vue3

Vue3的生命周期 从Vue2到Vue3&#x1f47e;不只onMounted又见keep-alive主要属性被你包裹应用场景 ) 从Vue2到Vue3&#x1f47e; Vue 3 保留了大多数 Vue 2 的生命周期钩子&#xff0c;同时引入了组合 API 中的生命周期钩子。以下是 Vue 3 中的生命周期钩子&#xff1a; 不…

R语言进行集成学习算法:随机森林

# 10.4 集成学习及随机森林 # 导入car数据集 car <- read.table("data/car.data",sep ",") # 对变量重命名 colnames(car) <- c("buy","main","doors","capacity","lug_boot","safety"…

linux下JDK的安装

前言&#xff1a; 安装部署java开发的代码都需要java环境&#xff0c;这里记录下linux下JDK的安装过程&#xff0c;仅供学习参考。 JDK的下载 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads 选择和操作系统匹配的版本进行下载 查看操作系统&…

记录些MySQL题集(11)

MySQL 组提交原理 MySQL 中事务的两阶段提交保证了 redo log 与 binlog 两种日志文件的数据一致性&#xff0c;但是并发事务场景下还需要保证事务顺序的一致性&#xff0c;因此通过组提交机制在保证顺序一致性的前提下提高写入效率。因此组提交是两阶段提交的一部分。 两阶段…

JavaScript基础(十五)

变量&返回值 js中的变量有两种: 局部变量和全局变量 全局变量: 在函数外声明的变量&#xff0c;网页上的所有函数和脚本都能访问它。 局部变量&#xff1a; 在函数内部声明的变量&#xff08;必须使用var&#xff09;&#xff0c;只能在函数内部访问它&#xff0c;我们…

区分C语言中的全局变量和java中的类的变量

该程序运行结果&#xff1a; 原因&#xff1a; new Homework08().count1();中改变的count的值是该对象的count变量&#xff0c; 但是Homework08 t1 new Homework08(); t1.count2(); t1.count2();改变的都是t1变量的count的值 //20224.07.16public class Homework08 {public …