HEVC/H.265面试问题准备(PART 4. NAL+并行)

近期因为要准备暑期实习以及后期的秋招环节,再一次温习了《新一代高效视频编码H.265/HEVC原理、标准与实现》经典书籍,现在记录下有关阅读心得以及可能面试的问题(所有的答案都是我自己思考的或者网络/书上摘抄的,因为本人水平有限,如果有错误或者需要补充可以私聊我)。

第九章. 网络适配层

1. 为什么要设计NAL+VCL两层结构?

  • VCL注重编码部分,重点在于去除时间/空间/视觉等冗余的编码算法部分,即负责高效的视频内容表达。
  • NAL负责用恰当的方式对数据进行打包和传送。NAL可以为复杂的视频数据增加友好的网络应用接口,以适应更好的网络环境。
  • NAL可以根据压缩比特流的内容特性把他们划分成若干个数据段,对每个数据段封装+标识其内容特性(放在NALU header信息中)即生成了NALU。
  • 比如说,在发生网络拥塞时,要选择性丢弃某些包,就可以选择重要性最低的分组进行丢弃(如不作为参考帧的编码帧)。由于NALU header中有相关的特性信息,所以无需再进行解码、分析码流等操作,这可以体现网络亲和性强的特性。

2. 阐述IRAP Intra Random Access Point
可以参考殷汶杰大神的blog:

http://blog.sina.com.cn/s/blog_520811730101jlsa.html

  • IRAP都是I帧,把视频流分成多个相对独立的区域CVS。包含有三种类型:IDR, CRA, BLA。
  • 其中,IDR和264里一样,引领封闭GOP。IDR会导致DPB(Decoded Picture Buffer 参考帧列表)清空,所以对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容。
  • CRA是265新增的类型,引领开放GOP。不同于IDR,CRA后的帧可以跨过CRA参考前一个CVS的帧,独立性较差,但是某种程度上可以提高编码效率(参考帧数量和选择增多)。
  • BLA书上的叙述我没太看懂。这里引用一下网络上的解答:

BLA图像可以用于拼接码率的应用中。当解码器遇到BLA图像时,会丢弃其RASL图像,而遇到CRA图像时则不会丢弃RASL。而RADL在两种情况下都需要被解码。

3. NALU Header

  • HEVC NALU Header长度固定为2字节,反映了该NALU的内容特性。

NLAU header结构

  • 只要根据NALU Header内的nuh_temporal_id_plus1就可以获取该NALU的重要性,配合nal_unit_type可以实现时域分级。id小的图像不会参考大的图像。
  • 264的NAL header只有1个字节,包含1bit禁止位 + 2 bits nal_ref_idc(越大说明该NAL越重要,最高优先级11,最低优先级00)+ 5bits nal_type。

4. 接入单元AU的概念

  • 多个按照解码顺序排列的NALU,解码后正好组成一幅图像。
  • AU可看成压缩视频比特流的基本单元,压缩视频流由多个按顺序排列的AU组成。

5. 分组流应用

  • 网络视频传输时,常采用分组流应用。分组流应用是把NALU作为网络分组的有效载荷,比如基于RTP/UDP/IP的实时视频通信。
  • RTP分组由RTP header + RTP 载荷组成。
  • 有三大类:单NALU分组(1v1),聚合分组AP(1分组 vs 多NALU),分片分组FP(多分组 vs 1NALU)。
  • RTP载荷的前两字节结构与NALU header结构相同。单NALU分组时,对NALU header进行复制。AP和FP时,载荷头的nal_unit_type分别为48、49。

第十章. 编解码并行处理

1. 并行处理的类型
① 功能并行。

  • 将应用程序划为相互独立的功能模块来并行执行,也称为流水线并行。比如把预测、熵编码等按功能分开并行执行。
  • 优点:
    充分利用时间上的并行性
    适用于硬件实现
  • 缺点:
    容易载荷失衡,效率下降。
    运算单元之间的数据通信在数据量大的情况下需要额外资源来存储。
    扩展性差。

② 数据并行。

  • 将数据信息划为相互独立的部分,每部分用不同的运算单元执行,并行处理。比如Tile,Slice,波前并行处理WPP。
  • 优点:
    容易实现负载均衡。
    扩展性强。
    相互独立的数据信息(如Tile、Slice)可以不用运算单元之间的通信。

功能与数据并行

2. HEVC中的编解码并行处理方式

  • 混合了功能并行和数据并行。
  • 熵解码模块和其他模块组成一级流水线。两个模块内部进行数据并行。
  • 其中,数据并行可采用基于Tile或者WPP的方式。

HEVC的并行解码模型
3. 为什么Tile级并行比Slice级并行编码效率更高?

  • Tile和Slice之间都是相互独立的,但是形状不同。Slice一般为条带状,横向跨度大,不一定规则,相关性低;而Tile成矩形状,更规则,相关性更强。

4.基于Tile的数据并行

  • 由于Tile之间互相独立(不考虑跨Tile的去块滤波 SAO),所以无需进行运算单元之间的通信。
  • Tile可以减少运动预测需要的缓冲数量。
    解释:Inter prediction时,需要为ME存储相应的参考信息。由于Tile改变了图像CTB的扫描顺序(整幅图像的光栅扫描变为Tile+CTB的两级光栅扫描),所以为了获取参考块像素信息,需要存储的像素点数可以有效减少。之前需要横跨整幅图像的宽度,现在只用跨过对应Tile的宽度即可。
  • 但是,Tile的引入也会有代价,其破坏了Tile边界附近的相关性。此外,CABAC会在Tile边界进行概率模型更新,所以降低了编码效率。

存储信息

5. 波前并行处理WPP

  • WPP是基于CTB级的数据并行方式,多行CTB同时处理,后一行处理比前一行滞后两个CTB来保证依赖关系不受到破坏。
  • 扩展性好,分辨率增加,CTB级并行的线程数目可以方便增加。分配给每个运算单元的数据信息量少,所以容易负载均衡。
  • 熵解码的上下文模型更新会带来一些问题,比如输出码率不稳定(开始和结束时候的运算单元数量变化),可以通过重叠波前并行处理方法解决。
    WPP
原创文章 17 获赞 4 访问量 3964

猜你喜欢

转载自blog.csdn.net/weixin_37524256/article/details/105497035