首页 > 其他分享 >HEVC的编码结构

HEVC的编码结构

时间:2023-10-09 11:56:34浏览次数:38  
标签:编码 HEVC 预测 PU 划分 CU 结构

一. h.264的编码结构

从编码原理看,H.264/AVC采用的是混合编码方式。从编码层次结构看,H.264/AVC采用的是分块式编码结构,将图像划分为若干宏块,主要编码操作针对宏块进行。宏块向下可以划分为多个更小的块或子块。向上可由若干宏块组成一个条,一帧图像则由数量不等的条组成。若干图像帧就形成了一个图像组(Group OfPicture,GOP),视频序列包含一系列的GOP,如图3.1所示。

宏块划分:根据帧间预测划分,变化小的区域用大尺寸

条划分:在编码中,以条为单位编码的,条和条相互间是独立的。某条的预测不能以其他条中的宏块为参考图像,这样某一条中的预测误差才不会传播到其他条中去。

档次与水平:兼容问题和编码格式

 

二. HEVC的网络适配和编码方式

为适应网络传输,增加对网络的“友好”性,HEVC 采取了分层处理的方法,分为视频编码层(VCL)和网络提取层(NAL)。

原始视频经过 VCL 层,被编码成视频数据,然后经过NAL层,封装成一个个NAL包以适应不同网络的视频传输。HEVC码流在应用过程中与H264/AV码流的区别就在于NAL层。

 2.1 hevc的四叉树划分

HEVC 将一个视频序列分为相继的若干图像组(GOP),每一组由该序列中连续的多帧图像组成。帧是四叉树划分的基本单位,每一帧图像经过四叉树划分,形成覆盖全帧的多个同样尺寸的方形编码树块(CTB)。CTB 还可以划分为更小的编码块(CB)。CB 是实施视频编码算法的基本单位,它还可以划分为预测块(PB)和变换块(TB)。

同一位置的亮度 CTB和两块色度 CTB,再加上相应的语法元素以及所包含的编码单元(CU)形成一编码树单元(CTU)。CTU可以按照四叉树结构分解为若千方形编码单元(CU),同一层次的CU必须是同一尺寸的4个方块,最多可有4 层分解,即 64X64,32X32,16X16和8X8。

每个CU包含一个亮度编码块(CB)、两个色度CB 以及相应的语法元素,如预测模式(内或帧间)、PU划分、RQT语法、从属的 PU和TU信息等。CU 是决定进行内预测还是帧间预测的单元,也就是说,整个 CU 只能是一种预测模式,不是帧内就是帧间。

编码块(CB)还可以进一步划分为一个或多个预测单块(PB)和变换块(TB),同一个CB 可以同时进行两种划分,一种是预测块的划分,另一种是变换块的划分。这两种划分都在这个CB 的几何位置中进行,但两者基本上是不相干,而且划分的方法也不同,尽管划分的结果还是在同一个CB中。

2.1.1 CU中的PU划分

 预测单元PU是HEVC进行预测运算的基本单元,只能定义在不再划分的最低层的CU中包括帧内预测和帧间预测两类。CU 决定了本单元包含的所有 PU 的预测方式和划分方式。

一个编码单元 CU可以划分为一个或多个预测单元 PU,CU到PU仅允许一层划分,最小的PU为4X4。划分可以是对称的,也可以是不对称的。

帧内预测中,一个亮度 PU 有一个内亮度预测模式,而相应的两个色度 PU 则共享一个帧内色度预测模式。

在每个PU中,同一个帧内预测模式被用于预测该PU内的每个样点。帧内预测的参考像素来自邻近的已重建的TU样点。

编码器可以选择使用穿越PU界线的残差变换。例如,对多个包含PU界线的PT差联合起来进行变换、量化和熵编码,有助于节省编码比特。

 

2.1 HEVC中的片和条划分

条:偏线性(I,P,B条)

片:并行控制,空间更紧凑

 

标签:编码,HEVC,预测,PU,划分,CU,结构
From: https://www.cnblogs.com/jhzj/p/17750729.html

相关文章

  • 树结构操作通用方法
    /***树操作通用方法,将一些常用方法提炼出来,方便使用。*@module树操作工具*/import{cloneDeep}from'lodash';import{uniqueArray,arrayRemoveAll,arrayRemove}from'./index';/***将数据转换成tree所需格式*@param{object}data要进行转换的object......
  • 今天就差不多完成了ai编码c语言程序的过程
    不断改进的提示语:writeaprogramincandcompilebygcc,createasystemtrayicon,whentheiconisrightclicked,popupanexitmenutoexittheprogram,listeninbackgroup,whenkeycombinationCtrl+LeftArrowispressed,getcurrentactivewindowinwi......
  • 哈夫曼编码效率问题
    例题给出问题解决......
  • Redis——底层和数据结构
    数据结构简单动态字符串SDS可以认为在Redis中所有的东西最终都是字符串。Redis是C语言实现的,但是Redis没有直接使用C语言中的字符串,C语言字符串是字符数组实现的,存在很多问题:1、获取字符串的长度需要运算,时间复杂度达到O(n)。2、非二进制安全,无法保存\0字符(被识别成结束标识)......
  • MySQL体系管理结构
    MySQL客户端与服务端模型MySQL是C/S结构的服务MySQL客户端mysqlmysqladminmysqldump图形化SQLyognavicatMySQL服务端mysqldMySQL服务端的连接方式TCP/IP连接mysql-uroot-p123-h10.0.0.51Socket连接mysql-uroot-p123-S/app/mysql/tmp/mysql.sock......
  • 数据结构的关键码序列的理解概述
    1、关键码序列的理解所谓关键码序列,就是出现在二叉排序树中的,对二叉排序树的各个结点进行排序的一个结点序列。依据左子树的各个结点的值都小于父结点的值,右子树的各个结点的值都大于父结点的值的条件进行排序。2、习题解决一般都是给我们一个二叉排序树的图,让我们去判断选......
  • Base64编码
    base64是什么?Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"一共64个字符的字符集,(另加一个“=”,实际是65个字符,至于为什么还会有一个“=",这个后面再说)。任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码。base64怎么转换首先将......
  • 05_数据结构与算法
    Sort排序算法sort包中实现了四种基本排序算法:插入排序、归并排序、堆排序、快速排序。但是它们不公开,只供sort包内部自己使用,所以在需要实现数据排序时不必考虑使用哪一种排序方法,只要实现了sort.Interface定义的三个方法:获取数据集合长度Len()、比较两个元素大小Less()、交......
  • 页帧的数据结构设计
    前言页帧page是物理内存管理的基本单位,structpage记录了任意时刻page的所有状态,因此每一个物理页帧都需一个对应的structpage结构体记录状态,对于内存多计算机系统来说需要的structpage本身就需要大量内存进行存储,因此该结构体中每增加一个变量带来的代价会很大,需要仔细控制该......
  • 内存管理中的关键数据结构
    前言在谈Linux内存管理框架之前需要了解NUMA,NUMA是非一致性内存访问(Uon-UniformMemoryAccess)的缩写,与之相反的是一致性内存访问UMA。在多核的UMA架构的机器上,CPU视角下所有的内存都是均匀的,不同CPU访问同一块内存的延迟是相同;而在NUMA架构的机器上内存被划分为不同的区域,对CP......