代码版本:HM-16.6
“概念整理”部分记录学习HM代码过程中遇到的一些之前不了解的概念。
场编码和帧编码
遇到这个概念,是在看TAppEncCfg类中有一个成员变量m_isField,这个变量会影响TAppEncTop的encode函数中创建TComPicYuv的时候分配的内存的高度不同,所以比较好奇蛇哥flag是控制什么的。
又发现encoder_lowdelay_main_field_coding.cfg之类的cfg文件中会指定FieldCoding为1,而正常的cfg文件中则不会设置这个值。所以解析cfg的时候,这个值默认为0。
查了一些资料,原来这个叫做场编码,对应的就是正常的帧编码。场编码分成顶场和底场,主要是应用在早期的编码场景中。具体内容可以参考这些链接:
帧编码与场编码的区别分析_飞翔的鲲的博客-CSDN博客_场编码
新的编码场景下应该用的不多了,不过也还是了解一下吧。
Slice/Slice Segment/Tile的差别
这几个概念困扰我已久,直到看到这篇知乎上的文章: