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://xiahunao.cn/news/3247021.html

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

相关文章

代码随想录二刷复习(二分法)

二分法模板: 1:左闭右闭区间写法 第一种写法,我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right] (这个很重要非常重要)。 区间的定义这就决定了二分法的代码应该如何写,因为定…

函数定义、合约与面向对象(以太坊solidity合约)

函数定义、合约与面向对象(以太坊solidity合约) 1-函数定义、构造与多态2-事件日志3-面向对象特征 1-函数定义、构造与多态 创建合约就是创建类,部署合约就是实例化 合约的方法还支持多态 还能使用第三方的库进行开发 整个合约部署后&…

运维管理数智化:数据与智能运维场景实践

本文来自腾讯蓝鲸智云社区用户:CanWay 摘要:笔者根据自身的技术和行业理解,分享嘉为蓝鲸数据与智能运维场景实践。 涉及关键字:一体化运维、平台化运维、数智化运维、AIOps、运维PaaS、运维工具系统、蓝鲸等。 本文作者&#xf…

自动驾驶AVM环视算法–全景和标定全功能算法实现和exe测试demo

参考:全景和标定全功能算法实现和exe测试demo-金书世界 1、测试环境 opencv310vs2022 2、使用的编程语言 c和c 3、测试的demo的获取 更新:测试的exe程序,无需解压码就可以体验算法测试效果 百度网盘: 链接:http…

minio 获取预览地址

1.进入到 minio,并设置桶的权限。 2.获取预览地址代码如下: 注意: GetPresignedObjectUrlArgs.builder().method(Method.GET),这个地方一定要用 GET,我当时按照官网的例子写的,没注意这个,搞了…

深入解析公有IP与私有IP:地址分配与使用限制

IP地址在网络基础设施的建设和维护过程中起着至关重要的作用。作为IP地址的两大类型,公有IP和私有IP各自具有独特的分配机制和使用限制。本文将详细分析两者之间的区别,以帮助读者更好地理解和使用IP地址。 1. 公有IP与私有IP概述 IP地址是网络中的唯一…

库迪“夏日果咖季”打卡活动走样,联营商不想配合了?

库迪的“夏日果咖季”打卡活动,真是让人在这个炎炎夏日受一肚子气。 有大批不同IP的网友在社交媒体平台吐槽,特意前去门店打卡,却被告知门店没有这个活动。 一位广州的网友在小红书发帖表示,上班前特意坐地铁去门店参加活动&…

半自动辅助制作数据集【实例分割】

利用yoloV8的实例分割模型,半自动辅助制作数据集 引言:【主要步骤】 步骤1:无人机航拍,收集基础图片 步骤2:将收集到的图片,全部用yoloV8-seg.pt模型进行实例分割【预测之前,将配置文件default.…

什么是大模型?(超详细)从入门到精通 一文读懂大模型的基本概念

1. 大模型的定义 大模型是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。大模型的设计目的是为了提高模型的表达能力和预测性能,能够处理更加复杂的任务和数据。大模型在各种领域都有…

海外社媒矩阵为何会被关联?如何IP隔离?

在当今的数字时代,社交媒体已经成为人们日常生活中不可或缺的一部分。通过社交媒体,人们可以与朋友互动,分享生活,甚至进行业务推广和营销。然而,社交媒体账号关联问题逐渐受到广泛关注。社交媒体账号为何会关联&#…

力扣经典题目之->删除有序数组中的重复项讲解 的讲解与实现

一:题目 二:思路讲解 第一步:创建两个下标,一个是第一个元素的(start0),一个是第二个元素的(end1) 第二步: a:end移动,直到遇到不等…

Flowable-会签与或签

一、会签 会签的意思是,在流程任务管理中,任务通常是由一个人或者多个人同时去处理的,这种任务叫做会签任务。类似于并行网关,会签任务一般需要任务候选人全部完成审批后,才能进入下一个审批环节。 (一) 会签类型 按…

持续集成06--Jenkins构建触发器

前言 在持续集成(CI)的实践中,构建触发器是自动化流程中不可或缺的一环。它决定了何时启动构建过程,从而确保代码变更能够及时地得到验证和反馈。Jenkins,作为业界领先的CI/CD工具,提供了多种构建触发器选项…

jeecgboot项目不知道什么原因启动出来8080端口后就不下去了,要等上10多分钟才出来接口地址等正常情况

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、项目中途不知道什么原因,就出现下面情况 具体如下: 2024-07-15 15:08:15.767 [main] [34mINFO [0;39m [36mliquibase.changelog:30[0;39m - Reading from jeec…

什么是鉴权开发框架?如何认证和限流

目录 一、鉴权开发框架介绍二、Django REST framework是什么三、如何实现认证、权限与限流功能四、Django REST framework的应用场景 一、鉴权开发框架介绍 鉴权开发框架是一种用于实现身份验证和授权的软件开发工具。它可以帮助开发者快速构建安全、可靠的身份验证和授权系统…

Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解

1. 引言 在微服务架构中,服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库,专为函数式编程设计,提供了断路器、重试、舱壁、限流器和限时器等功能。 这里不做过多演示,只是查看一下官方案例并换成maven构建相关展示&…

DNS查询过程

DNS(域名系统,Domain Name System)是一个用于将域名和IP地址相互映射的系统。当你在浏览器中输入一个网址时,浏览器会通过DNS查询过程来找到对应的IP地址,以便能够连接到目标服务器。其查询过程一般通过以下步骤&#…

Netgear WN604 downloadFile.php 信息泄露漏洞复现(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR(网件)公司生产的无线接入器(或无线路由器)提供Wi-Fi保护协议(WPA2-PSK, WPA-PSK),以及有线等效加密(WEP)64位、128位和152位支持,保障网络安全。同时支持MAC地址认证、802.1x RADIUS以及EAP TLS、TTLS、PEAP等安全机制,…

【Flowable | 第四篇】flowable工作流多任务实例节点实现会签/或签

文章目录 5.flowable工作流多任务实例节点实现会签/或签5.1会签/或签概念5.2多实例配置说明5.3会签例子5.3.1用户候选人配置5.3.2多实例配置5.3.3执行监听器配置5.3.5测试 5.flowable工作流多任务实例节点实现会签/或签 5.1会签/或签概念 我们在本篇中,将使用多任…

【JavaEE】synchronized原理详解

本文使用的是JDK1.8 目录 引言 Java对象在JVM的结构 对象头 Mark Word Monitor Owner EntryList WaitSet 加锁过程 锁消除 偏向锁 偏向锁使用 重偏向 撤销偏向 轻量级锁 重量级锁 自旋优化 引言 对于synchronized原理讲解之前,我们需要知道Java对象…