Add encoder support to ALTREF2
This CL adds the use of ALTREF2_FRAME to both single / comp reference
prediction at the encoder side. In particular, the encoder keeps the
distant altref as ALTREF, and uses the internal extra altrefs to
refresh ALTREF2.
Compared with the baseline (ext_tx and global_motion disabled simply
for speed concern):
(a) lowres: avg_psnr -0.395% ovr_psnr -0.393% ssim -0.329%
(b) midres: avg_psnr -0.419% ovr_psnr -0.431% ssim -0.444%
(c) AWCY High Latency:
PSNR | PSNR Cb | PSNR Cr | PSNR HVS | SSIM | MS SSIM | CIEDE 2000
-0.6661 | -0.5988 | -0.6669 | -0.6993 | -0.6988 | -0.7303 | -0.6051
(d) AWCY Low Latency:
PSNR | PSNR Cb | PSNR Cr | PSNR HVS | SSIM | MS SSIM | CIEDE 2000
0.0720 | -0.0505 | 0.1501 | 0.0670 | 0.0842 | 0.0517 | 0.0158
TODO list:
(1) To have altref2 incorporated with ext-comp-refs;
(2) To have altref2 fully work with new-multisymbol;
(3) To re-collect the initial default probs/cdfs;
(4) To tune the encoder gf group structure design for altref2.
Change-Id: I6ad63fd65afa903d3bba20acdb68e3b67acf7fdf
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 85ed073..89b4313 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -82,6 +82,39 @@
#if CONFIG_EXT_REFS
+#if CONFIG_ALTREF2
+
+#define LAST_FRAME_MODE_MASK \
+ ((1 << INTRA_FRAME) | (1 << LAST2_FRAME) | (1 << LAST3_FRAME) | \
+ (1 << GOLDEN_FRAME) | (1 << BWDREF_FRAME) | (1 << ALTREF2_FRAME) | \
+ (1 << ALTREF_FRAME))
+#define LAST2_FRAME_MODE_MASK \
+ ((1 << INTRA_FRAME) | (1 << LAST_FRAME) | (1 << LAST3_FRAME) | \
+ (1 << GOLDEN_FRAME) | (1 << BWDREF_FRAME) | (1 << ALTREF2_FRAME) | \
+ (1 << ALTREF_FRAME))
+#define LAST3_FRAME_MODE_MASK \
+ ((1 << INTRA_FRAME) | (1 << LAST_FRAME) | (1 << LAST2_FRAME) | \
+ (1 << GOLDEN_FRAME) | (1 << BWDREF_FRAME) | (1 << ALTREF2_FRAME) | \
+ (1 << ALTREF_FRAME))
+#define GOLDEN_FRAME_MODE_MASK \
+ ((1 << INTRA_FRAME) | (1 << LAST_FRAME) | (1 << LAST2_FRAME) | \
+ (1 << LAST3_FRAME) | (1 << BWDREF_FRAME) | (1 << ALTREF2_FRAME) | \
+ (1 << ALTREF_FRAME))
+#define BWDREF_FRAME_MODE_MASK \
+ ((1 << INTRA_FRAME) | (1 << LAST_FRAME) | (1 << LAST2_FRAME) | \
+ (1 << LAST3_FRAME) | (1 << GOLDEN_FRAME) | (1 << ALTREF2_FRAME) | \
+ (1 << ALTREF_FRAME))
+#define ALTREF2_FRAME_MODE_MASK \
+ ((1 << INTRA_FRAME) | (1 << LAST_FRAME) | (1 << LAST2_FRAME) | \
+ (1 << LAST3_FRAME) | (1 << GOLDEN_FRAME) | (1 << BWDREF_FRAME) | \
+ (1 << ALTREF_FRAME))
+#define ALTREF_FRAME_MODE_MASK \
+ ((1 << INTRA_FRAME) | (1 << LAST_FRAME) | (1 << LAST2_FRAME) | \
+ (1 << LAST3_FRAME) | (1 << GOLDEN_FRAME) | (1 << BWDREF_FRAME) | \
+ (1 << ALTREF2_FRAME))
+
+#else // CONFIG_ALTREF2
+
#define LAST_FRAME_MODE_MASK \
((1 << INTRA_FRAME) | (1 << LAST2_FRAME) | (1 << LAST3_FRAME) | \
(1 << GOLDEN_FRAME) | (1 << BWDREF_FRAME) | (1 << ALTREF_FRAME))
@@ -101,7 +134,9 @@
((1 << INTRA_FRAME) | (1 << LAST_FRAME) | (1 << LAST2_FRAME) | \
(1 << LAST3_FRAME) | (1 << GOLDEN_FRAME) | (1 << BWDREF_FRAME))
-#else
+#endif // CONFIG_ALTREF2
+
+#else // !CONFIG_EXT_REFS
#define LAST_FRAME_MODE_MASK \
((1 << GOLDEN_FRAME) | (1 << ALTREF_FRAME) | (1 << INTRA_FRAME))
@@ -118,7 +153,12 @@
((1 << ALTREF_FRAME) | (1 << BWDREF_FRAME) | (1 << GOLDEN_FRAME) | \
(1 << LAST2_FRAME) | 0x01) // NOLINT
#else // !CONFIG_EXT_COMP_REFS
+#if CONFIG_ALTREF2
+#define SECOND_REF_FRAME_MASK \
+ ((1 << ALTREF_FRAME) | (1 << ALTREF2_FRAME) | (1 << BWDREF_FRAME) | 0x01)
+#else // !CONFIG_ALTREF2
#define SECOND_REF_FRAME_MASK ((1 << ALTREF_FRAME) | (1 << BWDREF_FRAME) | 0x01)
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_COMP_REFS
#else // !CONFIG_EXT_REFS
#define SECOND_REF_FRAME_MASK ((1 << ALTREF_FRAME) | 0x01)
@@ -166,6 +206,9 @@
{ NEARESTMV, { LAST2_FRAME, NONE_FRAME } },
{ NEARESTMV, { LAST3_FRAME, NONE_FRAME } },
{ NEARESTMV, { BWDREF_FRAME, NONE_FRAME } },
+#if CONFIG_ALTREF2
+ { NEARESTMV, { ALTREF2_FRAME, NONE_FRAME } },
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
{ NEARESTMV, { ALTREF_FRAME, NONE_FRAME } },
{ NEARESTMV, { GOLDEN_FRAME, NONE_FRAME } },
@@ -177,6 +220,9 @@
{ NEWMV, { LAST2_FRAME, NONE_FRAME } },
{ NEWMV, { LAST3_FRAME, NONE_FRAME } },
{ NEWMV, { BWDREF_FRAME, NONE_FRAME } },
+#if CONFIG_ALTREF2
+ { NEWMV, { ALTREF2_FRAME, NONE_FRAME } },
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
{ NEWMV, { ALTREF_FRAME, NONE_FRAME } },
{ NEWMV, { GOLDEN_FRAME, NONE_FRAME } },
@@ -186,6 +232,9 @@
{ NEARMV, { LAST2_FRAME, NONE_FRAME } },
{ NEARMV, { LAST3_FRAME, NONE_FRAME } },
{ NEARMV, { BWDREF_FRAME, NONE_FRAME } },
+#if CONFIG_ALTREF2
+ { NEARMV, { ALTREF2_FRAME, NONE_FRAME } },
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
{ NEARMV, { ALTREF_FRAME, NONE_FRAME } },
{ NEARMV, { GOLDEN_FRAME, NONE_FRAME } },
@@ -195,6 +244,9 @@
{ ZEROMV, { LAST2_FRAME, NONE_FRAME } },
{ ZEROMV, { LAST3_FRAME, NONE_FRAME } },
{ ZEROMV, { BWDREF_FRAME, NONE_FRAME } },
+#if CONFIG_ALTREF2
+ { ZEROMV, { ALTREF2_FRAME, NONE_FRAME } },
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
{ ZEROMV, { GOLDEN_FRAME, NONE_FRAME } },
{ ZEROMV, { ALTREF_FRAME, NONE_FRAME } },
@@ -263,6 +315,12 @@
{ NEAREST_NEARESTMV, { LAST2_FRAME, BWDREF_FRAME } },
{ NEAREST_NEARESTMV, { LAST3_FRAME, BWDREF_FRAME } },
{ NEAREST_NEARESTMV, { GOLDEN_FRAME, BWDREF_FRAME } },
+#if CONFIG_ALTREF2
+ { NEAREST_NEARESTMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEAREST_NEARESTMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEAREST_NEARESTMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEAREST_NEARESTMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+#endif // CONFIG_ALTREF2
#if CONFIG_EXT_COMP_REFS
{ NEAREST_NEARESTMV, { LAST_FRAME, LAST2_FRAME } },
@@ -285,6 +343,12 @@
{ NEARESTMV, { LAST2_FRAME, BWDREF_FRAME } },
{ NEARESTMV, { LAST3_FRAME, BWDREF_FRAME } },
{ NEARESTMV, { GOLDEN_FRAME, BWDREF_FRAME } },
+#if CONFIG_ALTREF2
+ { NEARESTMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEARESTMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEARESTMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEARESTMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+#endif // CONFIG_ALTREF2
#if CONFIG_EXT_COMP_REFS
{ NEARESTMV, { LAST_FRAME, LAST2_FRAME } },
@@ -373,6 +437,40 @@
{ NEW_NEWMV, { GOLDEN_FRAME, BWDREF_FRAME } },
{ ZERO_ZEROMV, { GOLDEN_FRAME, BWDREF_FRAME } },
+#if CONFIG_ALTREF2
+ { NEAR_NEARMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEW_NEARESTMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEAREST_NEWMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEW_NEARMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEAR_NEWMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEW_NEWMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { ZERO_ZEROMV, { LAST_FRAME, ALTREF2_FRAME } },
+
+ { NEAR_NEARMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEW_NEARESTMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEAREST_NEWMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEW_NEARMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEAR_NEWMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEW_NEWMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { ZERO_ZEROMV, { LAST2_FRAME, ALTREF2_FRAME } },
+
+ { NEAR_NEARMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEW_NEARESTMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEAREST_NEWMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEW_NEARMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEAR_NEWMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEW_NEWMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { ZERO_ZEROMV, { LAST3_FRAME, ALTREF2_FRAME } },
+
+ { NEAR_NEARMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+ { NEW_NEARESTMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+ { NEAREST_NEWMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+ { NEW_NEARMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+ { NEAR_NEWMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+ { NEW_NEWMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+ { ZERO_ZEROMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+#endif // CONFIG_ALTREF2
+
#if CONFIG_EXT_COMP_REFS
{ NEAR_NEARMV, { LAST_FRAME, LAST2_FRAME } },
{ NEW_NEARESTMV, { LAST_FRAME, LAST2_FRAME } },
@@ -431,6 +529,17 @@
{ NEARMV, { GOLDEN_FRAME, BWDREF_FRAME } },
{ NEWMV, { GOLDEN_FRAME, BWDREF_FRAME } },
+#if CONFIG_ALTREF2
+ { NEARMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEWMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { NEARMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEWMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { NEARMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEWMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { NEARMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+ { NEWMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+#endif // CONFIG_ALTREF2
+
#if CONFIG_EXT_COMP_REFS
{ NEARMV, { LAST_FRAME, LAST2_FRAME } },
{ NEWMV, { LAST_FRAME, LAST2_FRAME } },
@@ -456,6 +565,13 @@
{ ZEROMV, { LAST3_FRAME, BWDREF_FRAME } },
{ ZEROMV, { GOLDEN_FRAME, BWDREF_FRAME } },
+#if CONFIG_ALTREF2
+ { ZEROMV, { LAST_FRAME, ALTREF2_FRAME } },
+ { ZEROMV, { LAST2_FRAME, ALTREF2_FRAME } },
+ { ZEROMV, { LAST3_FRAME, ALTREF2_FRAME } },
+ { ZEROMV, { GOLDEN_FRAME, ALTREF2_FRAME } },
+#endif // CONFIG_ALTREF2
+
#if CONFIG_EXT_COMP_REFS
{ ZEROMV, { LAST_FRAME, LAST2_FRAME } },
{ ZEROMV, { LAST_FRAME, LAST3_FRAME } },
@@ -503,6 +619,13 @@
{ NEARESTMV, { BWDREF_FRAME, INTRA_FRAME } },
{ NEARMV, { BWDREF_FRAME, INTRA_FRAME } },
{ NEWMV, { BWDREF_FRAME, INTRA_FRAME } },
+
+#if CONFIG_ALTREF2
+ { ZEROMV, { ALTREF2_FRAME, INTRA_FRAME } },
+ { NEARESTMV, { ALTREF2_FRAME, INTRA_FRAME } },
+ { NEARMV, { ALTREF2_FRAME, INTRA_FRAME } },
+ { NEWMV, { ALTREF2_FRAME, INTRA_FRAME } },
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
{ ZEROMV, { ALTREF_FRAME, INTRA_FRAME } },
@@ -6555,6 +6678,9 @@
aom_prob ref_single_p3 = av1_get_pred_prob_single_ref_p3(cm, xd);
aom_prob ref_single_p4 = av1_get_pred_prob_single_ref_p4(cm, xd);
aom_prob ref_single_p5 = av1_get_pred_prob_single_ref_p5(cm, xd);
+#if CONFIG_ALTREF2
+ aom_prob ref_single_p6 = av1_get_pred_prob_single_ref_p6(cm, xd);
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
unsigned int base_cost = av1_cost_bit(intra_inter_p, 1);
@@ -6563,9 +6689,12 @@
#if CONFIG_EXT_REFS
ref_costs_single[LAST2_FRAME] = ref_costs_single[LAST3_FRAME] =
ref_costs_single[BWDREF_FRAME] =
+#if CONFIG_ALTREF2
+ ref_costs_single[ALTREF2_FRAME] =
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
- ref_costs_single[GOLDEN_FRAME] =
- ref_costs_single[ALTREF_FRAME] = base_cost;
+ ref_costs_single[GOLDEN_FRAME] =
+ ref_costs_single[ALTREF_FRAME] = base_cost;
#if CONFIG_EXT_REFS
ref_costs_single[LAST_FRAME] += av1_cost_bit(ref_single_p1, 0);
@@ -6573,6 +6702,9 @@
ref_costs_single[LAST3_FRAME] += av1_cost_bit(ref_single_p1, 0);
ref_costs_single[GOLDEN_FRAME] += av1_cost_bit(ref_single_p1, 0);
ref_costs_single[BWDREF_FRAME] += av1_cost_bit(ref_single_p1, 1);
+#if CONFIG_ALTREF2
+ ref_costs_single[ALTREF2_FRAME] += av1_cost_bit(ref_single_p1, 1);
+#endif // CONFIG_ALTREF2
ref_costs_single[ALTREF_FRAME] += av1_cost_bit(ref_single_p1, 1);
ref_costs_single[LAST_FRAME] += av1_cost_bit(ref_single_p3, 0);
@@ -6581,6 +6713,9 @@
ref_costs_single[GOLDEN_FRAME] += av1_cost_bit(ref_single_p3, 1);
ref_costs_single[BWDREF_FRAME] += av1_cost_bit(ref_single_p2, 0);
+#if CONFIG_ALTREF2
+ ref_costs_single[ALTREF2_FRAME] += av1_cost_bit(ref_single_p2, 0);
+#endif // CONFIG_ALTREF2
ref_costs_single[ALTREF_FRAME] += av1_cost_bit(ref_single_p2, 1);
ref_costs_single[LAST_FRAME] += av1_cost_bit(ref_single_p4, 0);
@@ -6588,6 +6723,11 @@
ref_costs_single[LAST3_FRAME] += av1_cost_bit(ref_single_p5, 0);
ref_costs_single[GOLDEN_FRAME] += av1_cost_bit(ref_single_p5, 1);
+
+#if CONFIG_ALTREF2
+ ref_costs_single[BWDREF_FRAME] += av1_cost_bit(ref_single_p6, 0);
+ ref_costs_single[ALTREF2_FRAME] += av1_cost_bit(ref_single_p6, 1);
+#endif // CONFIG_ALTREF2
#else // !CONFIG_EXT_REFS
ref_costs_single[LAST_FRAME] += av1_cost_bit(ref_single_p1, 0);
ref_costs_single[GOLDEN_FRAME] += av1_cost_bit(ref_single_p1, 1);
@@ -6602,6 +6742,9 @@
ref_costs_single[LAST2_FRAME] = 512;
ref_costs_single[LAST3_FRAME] = 512;
ref_costs_single[BWDREF_FRAME] = 512;
+#if CONFIG_ALTREF2
+ ref_costs_single[ALTREF2_FRAME] = 512;
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
ref_costs_single[GOLDEN_FRAME] = 512;
ref_costs_single[ALTREF_FRAME] = 512;
@@ -6613,6 +6756,9 @@
aom_prob ref_comp_p1 = av1_get_pred_prob_comp_ref_p1(cm, xd);
aom_prob ref_comp_p2 = av1_get_pred_prob_comp_ref_p2(cm, xd);
aom_prob bwdref_comp_p = av1_get_pred_prob_comp_bwdref_p(cm, xd);
+#if CONFIG_ALTREF2
+ aom_prob bwdref_comp_p1 = av1_get_pred_prob_comp_bwdref_p1(cm, xd);
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
unsigned int base_cost = av1_cost_bit(intra_inter_p, 1);
@@ -6681,7 +6827,11 @@
ref_costs_comp[GOLDEN_FRAME] = base_cost;
#if CONFIG_EXT_REFS
- ref_costs_comp[BWDREF_FRAME] = ref_costs_comp[ALTREF_FRAME] = 0;
+ ref_costs_comp[BWDREF_FRAME] =
+#if CONFIG_ALTREF2
+ ref_costs_comp[ALTREF2_FRAME] =
+#endif // CONFIG_ALTREF2
+ ref_costs_comp[ALTREF_FRAME] = 0;
#endif // CONFIG_EXT_REFS
#if CONFIG_EXT_REFS
@@ -6699,7 +6849,15 @@
// NOTE(zoeliu): BWDREF and ALTREF each add an extra cost by coding 1
// more bit.
ref_costs_comp[BWDREF_FRAME] += av1_cost_bit(bwdref_comp_p, 0);
+#if CONFIG_ALTREF2
+ ref_costs_comp[ALTREF2_FRAME] += av1_cost_bit(bwdref_comp_p, 0);
+#endif // CONFIG_ALTREF2
ref_costs_comp[ALTREF_FRAME] += av1_cost_bit(bwdref_comp_p, 1);
+
+#if CONFIG_ALTREF2
+ ref_costs_comp[BWDREF_FRAME] += av1_cost_bit(bwdref_comp_p1, 0);
+ ref_costs_comp[ALTREF2_FRAME] += av1_cost_bit(bwdref_comp_p1, 1);
+#endif // CONFIG_ALTREF2
#else // !CONFIG_EXT_REFS
ref_costs_comp[LAST_FRAME] += av1_cost_bit(ref_comp_p, 0);
ref_costs_comp[GOLDEN_FRAME] += av1_cost_bit(ref_comp_p, 1);
@@ -6722,6 +6880,9 @@
ref_costs_comp[LAST2_FRAME] = 512;
ref_costs_comp[LAST3_FRAME] = 512;
ref_costs_comp[BWDREF_FRAME] = 512;
+#if CONFIG_ALTREF2
+ ref_costs_comp[ALTREF2_FRAME] = 512;
+#endif // CONFIG_ALTREF2
ref_costs_comp[ALTREF_FRAME] = 512;
#endif // CONFIG_EXT_REFS
ref_costs_comp[GOLDEN_FRAME] = 512;
@@ -10061,6 +10222,9 @@
AOM_GOLD_FLAG,
#if CONFIG_EXT_REFS
AOM_BWD_FLAG,
+#if CONFIG_ALTREF2
+ AOM_ALT2_FLAG,
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
AOM_ALT_FLAG
};
@@ -10295,25 +10459,11 @@
for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
if (!(cpi->ref_frame_flags & flag_list[ref_frame])) {
-// Skip checking missing references in both single and compound reference
-// modes. Note that a mode will be skipped iff both reference frames
-// are masked out.
-#if CONFIG_EXT_COMP_REFS
+ // Skip checking missing references in both single and compound reference
+ // modes. Note that a mode will be skipped iff both reference frames
+ // are masked out.
ref_frame_skip_mask[0] |= (1 << ref_frame);
ref_frame_skip_mask[1] |= SECOND_REF_FRAME_MASK;
-#else // !CONFIG_EXT_COMP_REFS
-#if CONFIG_EXT_REFS
- if (ref_frame == BWDREF_FRAME || ref_frame == ALTREF_FRAME) {
- ref_frame_skip_mask[0] |= (1 << ref_frame);
- ref_frame_skip_mask[1] |= ((1 << ref_frame) | 0x01);
- } else {
-#endif // CONFIG_EXT_REFS
- ref_frame_skip_mask[0] |= (1 << ref_frame);
- ref_frame_skip_mask[1] |= SECOND_REF_FRAME_MASK;
-#if CONFIG_EXT_REFS
- }
-#endif // CONFIG_EXT_REFS
-#endif // CONFIG_EXT_COMP_REFS
} else {
for (i = LAST_FRAME; i <= ALTREF_FRAME; ++i) {
// Skip fixed mv modes for poor references
@@ -10346,6 +10496,9 @@
#if CONFIG_EXT_REFS
(1 << LAST2_FRAME) | (1 << LAST3_FRAME) |
(1 << BWDREF_FRAME) |
+#if CONFIG_ALTREF2
+ (1 << ALTREF2_FRAME) |
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
(1 << GOLDEN_FRAME);
ref_frame_skip_mask[1] = SECOND_REF_FRAME_MASK;
@@ -10519,6 +10672,12 @@
ref_frame_skip_mask[0] |= BWDREF_FRAME_MODE_MASK;
ref_frame_skip_mask[1] |= SECOND_REF_FRAME_MASK;
break;
+#if CONFIG_ALTREF2
+ case ALTREF2_FRAME:
+ ref_frame_skip_mask[0] |= ALTREF2_FRAME_MODE_MASK;
+ ref_frame_skip_mask[1] |= SECOND_REF_FRAME_MASK;
+ break;
+#endif // CONFIG_ALTREF2
#endif // CONFIG_EXT_REFS
case ALTREF_FRAME: ref_frame_skip_mask[0] |= ALTREF_FRAME_MODE_MASK;
#if CONFIG_EXT_REFS