HEVC—参数GOP,SLICE,TILE解疑

一直不是很理解GOP的概念

视频序列由若干时间连续的图像构成,在对其压缩的时候,先将该视频分割为若干个小的图像组,GOP。在视频编码中有两种GOP类型

封闭式GOP,每一个GOP以IDR图像开始,各个GOP之间独立编码

开发式GOP中第一个GOP 为IDR图像,后续的GOP中第一个为non-IDR图像,即帧间预测的时候后面GOP的图像可以参考一面GOP图像的信息

SS(slice segment)

SS为片段,每个片由一个或者多个片段组成,一个SS在编码时先被分为大小相同的CTU

SS来源于片 Slice

一个图片可以分割为一个或者多个片(注意这里的片划分,边界不一定需要是水平的,可以是一些不对称的部分),每个片的数据都是独立的

不同片信息的头信息都是独立获取的,因此每一个片在进行熵解码之前都需要对其解码环境进行初始化和更新

同时,不能跨过片的边界进行帧内帧间预测

但是在进行环路滤波的时候,允许跨过片的边界(这里回忆AVS中尽心环路滤波就是在图片重构结束后,对整帧图片进行环路滤波)

一个独立的slice可以被划分为若干个SS,包括一个独立的SS,和若干个依赖的SS,并且以独立的SS开始解码

独立的SS表示所有的句法元素都是由其自身进行确定

依赖SS,其涉及的句法元素由已经解码的独立的SS推断得到,可以共享一些独立SS的信息

预测过程不能跨越独立SS的边界,但是可以跨越依赖SS的边界

同一帧图片中的SS都是参考相同的PPS

Tile:

新引入的概念,水平和垂直方向进行分割的矩形区域。主要是为了增加并行计算的同时不引入新的错误扩散

Slice 包括 SS, SS包括CTU

Tile是直接包括CTU

slice的划分和tile的划分需要遵守下面两个条件之一:

(1) 一个slice/SS 当中的所有CTU属于同一个Tile

(2)一个Tile 中所有的CTU属于同一个Slice/SS

时间: 2024-12-19 15:50:27

HEVC—参数GOP,SLICE,TILE解疑的相关文章

FFmpeg的HEVC解码器源代码简单分析:环路滤波(Loop Filter)

===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg的HEVC解码器源代码简单分析:概述 FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分 FFmpeg的HEVC解码器源代码简单分析:解码器主干部分 FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-PU FFmpeg的HEVC解码器源代码简单

FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-TU

本文分析FFmpeg的libavcodec中的HEVC解码器的CTU解码(CTU Decode)部分的源代码.FFmpeg的HEVC解码器调用hls_decode_entry()函数完成了Slice解码工作.hls_decode_entry()则调用了hls_coding_quadtree()完成了CTU解码工作.由于CTU解码部分的内容比较多,因此将这一部分内容拆分成两篇文章:一篇文章记录PU的解码,另一篇文章记录TU解码.本文记录TU的解码过程. 函数调用关系图 FFmpeg HEVC解码器

FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-PU

本文分析FFmpeg的libavcodec中的HEVC解码器的CTU解码(CTU Decode)部分的源代码.FFmpeg的HEVC解码器调用hls_decode_entry()函数完成了Slice解码工作.hls_decode_entry()则调用了hls_coding_quadtree()完成了CTU解码工作.由于CTU解码部分的内容比较多,因此将这一部分内容拆分成两篇文章:一篇文章记录PU的解码,另一篇文章记录TU解码.本文记录PU的解码过程. 函数调用关系图 FFmpeg HEVC解码器

slice()

提取字符串中的一部分,并返回这个新的字符串 str.slice(beginSlice[, endSlice]) 参数 beginSlice 从该索引(以 0 为基数)处开始提取原字符串中的字符.如果值为负数,会被当做 sourceLength + beginSlice 看待,这里的sourceLength 是字符串的长度 (例如, 如果beginSlice 是 -3 则看作是: sourceLength - 3) endSlice 可选.在该索引(以 0 为基数)处结束提取字符串.如果省略该参数

Numpy的tile函数

1.函数的定义与说明 tile函数是模板numpy.lib.shape_base中的函数. 函数的形式是tile(A,reps) 函数参数说明中提到A和reps都是array_like的,什么是array_like的parameter呢?在网上查了一下,始终搞不明白,便把熟悉的python数据类型都试了一下,得出以下结论. A的类型众多,几乎所有类型都可以:array, list, tuple, dict, matrix以及基本数据类型int, string, float以及bool类型. re

slice,substr和substring的区别

首先,他们都接收两个参数,slice和substring接收的是起始位置和结束位置(不包括结束位置),而substr接收的则是起始位置和所要返回的字符串长度. 直接看下面例子: var test = 'hello world'; alert(test.slice(4,7)); //o w alert(test.substring(4,7)); //o w alert(test.substr(4,7)); //o world 这里有个需要注意的地方就是:substring是以两个参数中较小一个作为

【Go入门教程2】内置基础类型(Boolean、数值、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值

这小节我们将要介绍如何定义变量.常量.Go内置类型以及Go程序设计中的一些技巧. 定义变量 Go语言里面定义变量有多种方式. 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面: // 定义一个名称为“variableName”,类型为"type"的变量 var variableName type 定义多个变量 // 定义三个类型都是“type”的变量 var vname1, vname2, vname3 type 定义变量并初始化值 // 初始化

js中String对象slice()方法跟subString()的区别

slice() 和 substring() ECMAScript 提供了两种方法从子串创建字符串值,即 slice() 和 substring().这两种方法返回的都是要处理的字符串的子串,都接受一个或两个参数.第一个参数是要获取的子串的起始位置,第二个参数(如果使用的话)是要获取子串终止前的位置(也就是说,获取终止位置处的字符不包括在返回的值内).如果省略第二个参数,终止位就默认为字符串的长度. 与 concat() 方法一样,slice() 和 substring() 方法都不改变 Stri

slice()方法 和splice 方法的区别。。。

定义 splice() 方法 用于插入.删除或替换数组的元素. slice() 方法 可提取字符串的某个部分,并以新的字符串返回被提取的部分. 用法  splice 的参数 :splice (start, deleteCount, [item1[, item2[, . . . [,itemN]]]]) 数组从 start下标开始,删除deleteCount 个元素,并且可以在这个位置开始添加 n个元素 当start ,deleteCount 均为0 的时候,也就是在数组的最前面插入新的元素. 当