@IT·互联网

AV1-码流与结构

2023-12-14  本文已影响0人  yongbaoqiji

本节简单认识AV1的码流结构。

1. 码流OBU

OBU(open bitstream units)是AV1码流组成的基本单元,不同OBU序列按照解码顺序组成码流。
OBU由OBU Header和OBU Playload组成,其中header声明了OBU的类型和大小。
OBU的类型及功能如下:


bitstream
OBU 说明
sequence_header_obu 一段编码序列的共用信息,标识profile、frame_width_bits_minus_1、frame_height_bits_minus_1、use_128x128_superblock、enable_filter_intra、enable_intra_edge_filter等信息,类似SPS。
temporal_delimiter_obu 仅作为时间分割作用的obu,不包含playload, 代表帧的pts,所有跟在这个obu后面的帧可以使用这个PTS
frame_header_obu 帧信息如帧内/帧间类型,参考帧, 屏幕内容编码、MV精度控制、tile划分、量化参数、滤波参数、frame_size等信息,可以说frame_header中存有解码所需要的大部分功能控制类信息。类似PPS
tile_group_obu 包含一个或多个tile(及tile内SB)的码流信息,每个tile可以被单独解码。
frame_obu 含frame_header_obu和tile_group_obu。
metadata_obu HDR、SVC等。
tile_list 用于large scale。
padding_obu 一个填充数据OBU,可以被AV1标准解码器忽略。
reserved_obu 若一个OBU的obu_type与上述所有OBU都不相同的话,则该OBU为reserved_obu。
obu_type

2. 帧类型:

frame_type

3. Superblock与Tile:

超级编码块是AV1支持的最大编码块,luminace最大尺度是128x128,chroma最大是64x64,大小由Sequence Header Obu定义,Superblock仅依赖左、上侧的Superblock。

superblock

Superblock可进一步递归划分为更小的块,划分方式如上图。使用较大的块,如128×128 Luma块可以避免如4K场景下的预测模式信息冗余,同时为更好的提升复杂画面的质量,最小支持4x4的Luma块。

Tile是由多个Superblock组成的矩形块,Tile边界限制了帧内预测和概率模型的更新,因此,Tile的特征是支持单独解码,为多线程编解码提供了支持。TIle最小就是1个Superblock,最大tile对应4096x2304个Luma灰度采样数据。一个帧最大支持512个TIle单元。

AV1支持2种方式定义Tile的大小,一种是全部统一大小,一种是对大小是否一致不做限制。之所以有大小不统一的Tile划分的原因是,不同Tile的编码运算复杂度随着图像内容不同而不同,对于复杂度较高的tile倾向使用较小尺寸的Tile,进而平衡不同线程运行在不同CPU核上的运算负担,尤其是面对其中存在巨大计算量的Tile上,这样还可以减少计算延时。

值得注意的是,为避免出现编码块边界振铃效应,Tile边界需要进行图像后处理,类似Deblock Filter和SAO滤波。

tile

未经声明,禁止转载,喜欢的给个赞吧!

上一篇 下一篇

猜你喜欢

热点阅读