VVC之编码结构(新一代通用视频编码的读书笔记)
- 缩写
- 概述
- EncApp
- main函数解读
缩写
缩写 | 含义 |
---|---|
CVS | Coded Video Sequence, 编码视频序列 |
IRAP | Intra Random Access Point, 帧内随机接入点 |
GDR | Gradual Decoding Refresh, 逐渐解码刷新 |
AU | Access Unit, 访问单元 |
PU | Picture Unit, 图像单元 |
CLVS | Coded Layer Video Sequence, 编码视频序列层 |
CTU | Coding Tree Unit, 树形编码单元 |
CTB | Coding Tree Block, 树形编码块 |
VPS | Video Parameter Set, 视频参数集 |
SPS | Sequence Parameter Set, 序列参数集 |
PPS | Picture Parameter Set, 图像参数集 |
PH | Picture Header, 图像头 |
APS | Adaptation Parameter Set, 自适应参数集 |
DCI | Decoding Capability Information, 解码能力信息 |
SEI | Supplemental Enhancement Information, 附加增强信息 |
PTL | Profile, Tier and Level |
ALF | 子适应环路滤波 |
LMCS | 亮度映射与色度缩放 |
概述
每个PU包含且仅包含一幅完整图像的编码数据。
当一个AU包含多个PU时,每个PU可以是特定质量或分辨率(可分级视频流)图像,也可以是多视点视频的某一视点,以及深度、反射率等属性信息。因此,AU中的不同PU被归属为不同的层(Layer)。
参数集是一个独立的数据单位,它包含视频不同层级编码单元的共用信息。
- VPS:PU间相互依赖关系,哪些PU解码图像可以输出之类的。主要用来支持分层编码。
- SPS:一个CVS中所有图像共用的信息,如档次级别,编码工具开关标志等。
- PPS:一幅图像所有Slice的共用信息。
- APS:包含类似图像头信息或者Slice头信息,会被一幅图像的多个Slice或不同图像的Slice使用。
- DCI:包含PTL信息,用于编码流的会话协商。
- SEI:视频内容的附加信息,不影响解码过程。
Tile:一幅图像可以划分为若干个Tile,即从水平方向和垂直方向将一幅图像分割成若干个矩形区域,一个矩形区域就是一个Tile。每个Tile包含整数个CTU,可以独立解码。划分Tile的主要目的是在增强并行处理能力的同时又不引入新的错误扩散。
Tile提供比CTB更大程度的并行,在使用期间无须进行复杂的线程同步(这个没看懂)。
EncApp
主体编码代码模块,定义了编码时的输入输出和编码器。
成员函数:创建编码器,初始化,销毁编码器,文件写入写出及一些在编码时需要用的功能函数。
main函数解读
创建EncoderApp类,EncoderApp中定义了输入输出编码器等。
创建编码器。
poc:“Picture Order Count”,即图像序列编号或图片的序号。在视频编码(如H.266/VVC)中,POC通常用于表示每个图像帧(或场)在图像序列中的顺序编号,同时也可以作为参考图像(Reference Picture)的选择依据。
和EncApp.cpp中👇
和Enclib.cpp中👇
开始编码视频序列