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

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.mzph.cn/news/872775.shtml

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

相关文章

【Elasticsearch7.11】reindex问题

参考博文链接 问题:reindex 时出现如下问题 原因:数据量大,kibana的问题 解决方法: 将DSL命令转化成CURL命令在服务上执行 CURL命令 自动转化 curl -XPOST "http://IP:PORT/_reindex" -H Content-Type: application…

Python: 一些python和Java不同的基础语法

文章目录 1. 数据类型2. 字符串的引用3. 字符串拼接4. Python中的报错5. Python中的输入语句(input)6. 运算符(**和//)7. 除法运算8. 注释方法: #或者三引号9. Python中的比较10. Java中用and, or, not代替逻辑运算符11. 多元赋值12. Python不支持自增自减操作13. 在Python中, …

zookeeper基础知识学习

官网:Apache ZooKeeper 下载地址:Index of /dist/zookeeper/zookeeper-3.5.7Index of /dist/zookeeperIndex of /dist/zookeeper/zookeeper-3.5.7 ZK配置参数说明: 1、tickTime2000:通讯心跳时间,zookeeper服务器与客…

笑中带泪《抓娃娃》

【标题】笑中带泪,《抓娃娃》:一场关于成长的中式惊悚喜剧盛宴在这个夏日炎炎的季节里,一部名为《抓娃娃》的电影悄然上映,以沈腾与马丽的黄金搭档再次点燃观众的热情。然而,当笑声在影院回荡时,一股不易察…

搭建图片缓存服务器,解决图片访问403 Forbidden问题

在现代Web开发中,图片是网站和应用的重要组成部分。然而,有时我们在访问某些图片时会遇到403 Forbidden错误,尤其是自己的应用访问互联网上的三方的图片时,这通常是由于别人的服务器设置了访问限制。本文将介绍如何通过搭建一个图…

7月15日学习打卡,二叉搜索树和字符串操作

hello大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不…

C#学习

C#学习 1.B站丑萌气质狗C#的循环-判断泛型错误处理面向对象static的使用定义showInfo类和Hero类 在这里插入图片描述 然后在该解决方案add新建一个类库,点击rebuild,会在bin文件夹下生成.dll文件 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direc…

数据类型与运算符

一、进制 1.1 进制的区分 1.2进制的换算 只要掌握计算器的方式即可。人工计算的方式了解一下就行了。 二、计算机数据的存储原理 2.1 存储单位 最小的单位:比特位 bit 1位比特要么为0,要么为1 最基本的单位:字节 …

Spring-Cache 缓存

1.简介 2.SpringCache 整合 简化缓存开发 1.导入依赖 <!-- spring cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>2.redis 作为缓存…

二分法binary search

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

解决一下git clone失败的问题

1&#xff09;.不开梯子&#xff0c;我们用https克隆 git clone https://github.com 报错&#xff1a; Failed to connect to github.com port 443 after 2091 ms: Couldnt connect to server 解决办法&#xff1a; 开梯子&#xff0c;然后# 注意修改成自己的IP和端口号 gi…

docker搭建普罗米修斯监控gpu

ip8的服务器监控ip110和ip111的服务器 被监控的服务器110和111只需要安装node-export和nvidia-container-toolkit 下载镜像包 docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana新建目录 mkdir /opt/prometheus cd /opt/prometheus/…

生信软件27 - 基于python的基因注释数据查询/检索库mygene

1. mygene库简介 MyGene.info提供简单易用的REST Web服务来查询/检索基因注释数据&#xff0c;具有以下特点&#xff1a; mygene技术文档&#xff1a; https://docs.mygene.info/en/latest/ 多物种支持: 包括人、小鼠、大鼠、斑马鱼等多个模式生物&#xff1b; 多数据源聚合…

卷积神经网络图像识别车辆类型

卷积神经网络图像识别车辆类型 1、图像 自行车: 汽车: 摩托车: 2、数据集目录 3、流程 1、获取数据,把图像转成矩阵,并随机划分训练集、测试集 2、把标签转为数值,将标签向量转换为二值矩阵 3、图像数据归一化,0-1之间的值 4、构造卷积神经网络 5、设置图像输入…

记录些MySQL题集(8)

ACID原则、事务隔离级别及事务机制原理 一、事务的ACID原则 什么是事务呢&#xff1f;事务通常是由一个或一组SQL组成的&#xff0c;组成一个事务的SQL一般都是一个业务操作&#xff0c;例如聊到的下单&#xff1a;「扣库存数量、增加订单详情记录、插入物流信息」&#xff0…

Qt5.12.2安装教程

文章目录 文章介绍下载连接安装教程 文章介绍 安装Qt5.12.2 下载连接 点击官网下载 安装包下载完毕 安装教程 点开设置&#xff0c;添加临时储存库&#xff0c;复制连接“https://download.qt.io/online/qtsdkrepository/windows_x86/root/qt/” 点击测试&#xff0…

set类和map类介绍和简单使用

目录 set类介绍与简单使用 set类 multiset类 map类介绍与简单使用 map类 multimap类 set类介绍与简单使用 set类是一种关联式容器&#xff0c;在数据检索时比序列式容器效率更高。本质是一个常规的二叉搜索树&#xff0c;但是为了防止出现单支树导致效率下降进行了相关优…

【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)

目录 部署项目到云服务器什么是部署一、 创建MySQL数据库二、 修改idea配置项三、 数据打包四、 部署云服务器五、开放端口号六 、 验证程序 部署项目到云服务器 什么是部署 ⼯作中涉及到的"环境" 开发环境:开发⼈员写代码⽤的机器.测试环境:测试⼈员测试程序使⽤…

SQL面试题-留存率计算

表定义&#xff1a; create table if not exists liuliang_detail (user_id string comment ,record_time string comment yyyymmdd hh:mi:ss ) comment 流量明细表 ; 方法一&#xff1a; 计算的是整段时间范围内&#xff0c;每一天为基准的所有的留存1、2、7天的用户数。 …

WEB前端05-JavaScrip基本对象

JavaScript对象 1.Function对象 函数的创建 //方法一&#xff1a;自定义函数 function 函数名([参数]) {函数体[return 表达式] }//方法二&#xff1a;匿名函数 (function([参数]) {函数体[return 表达式] }); **使用场景一&#xff1a;定义后直接调用使用(只使用一次) (fun…