帧间预测算法里另一个重要的概念就是参考帧了
Reference Frame
在实际的软件实现中,一般编码器会维护两个Reference Frame list,分别为 RefFrame[0]和RefFrame[1],当仅只有一个参考帧时,RefFrame[1]会被置空,也就是赋值为 -1
RefFrame[0] | Name of ref_frame |
---|---|
0 | INTRA_FRAME |
1 | LAST_FRAME |
2 | LAST2_FRAME |
3 | LAST3_FRAME |
4 | GOLDEN_FRAME |
5 | BWDREF_FRAME |
6 | ALTREF2_FRAME |
7 | ALTREF_FRAME |
RefFrame[1] | Name of ref_frame |
---|---|
-1 | NONE |
0 | INTRA_FRAME |
1 | LAST_FRAME |
2 | LAST2_FRAME |
3 | LAST3_FRAME |
4 | GOLDEN_FRAME |
5 | BWDREF_FRAME |
6 | ALTREF2_FRAME |
7 | ALTREF_FRAME |
根据上面提到的概念,帧间预测的时候是分为single reference和compound reference的,顾名思义,single reference就是只参考一个参考帧,compound reference指复合两个参考帧得出最终参考。
这里注意点,compound prediction是参考两帧,但并不意味着这两帧一前一后,因为compound prediction的参考帧也分同向参考于双向参考
下图就是AV1中帧的参考结构,如上面所列出来的,帧间一共有7帧可作为参考帧,其含义大致可以如下理解
参照帧名 | 含义 |
---|---|
LAST_FRAME | 以前帧中最近的参考帧 |
LAST2_FRAME | 以前帧中第二近的参考帧 |
LAST3_FRAME | 以前帧中第三近的参考帧 |
GOLDEN_FRAME | 以前帧中较远的帧,Golden一般为I帧 |
BWDREF_FRAME | 未来帧最近的,该帧不做时域滤波 |
ALTREF2_FRAME | 未来帧中第二近的 |
ALTREF_FRAME | 未来帧中最远的帧 |
Single Reference 和 Compound Reference
single reference意味着仅从一帧获取运动向量,而compound reference是从不同的两帧获取运动向量,然后取其平均而得到最后的运动向量的。