Add new coding tool of ext-comp-refs

The tool of ext-comp-refs adds the uni-directional compound reference
prediction. In details, 3 pairs of uni-direcitonal compound references
are added for the comp ref prediction:
(LAST_FRAME, LAST2_FRAME),
(LAST_FRAME, GOLDEN_FRAME), and
(BWDREF_FRAME, ALTREF_FRAME).

This new tool of ext-comp-refs will eventually overwrite
one-side-compound and have the two coding tools to merge to one.

It achieves -0.35 ~ -0.55% coding gains in BDRate, compared against
AV1 baseline with the default experiments on, but without
one-sided-compound. It achieves -0.2% ~ -0.3% coding gains when
one-sided-compound is on. It achieves larger gains on higher
resolution.

Change-Id: Icbdb16e97b96aaebaf2213f5f72d5331e2e358eb
diff --git a/av1/common/enums.h b/av1/common/enums.h
index 2e802de..f008f9d 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -286,6 +286,18 @@
 #endif  // CONFIG_EXT_REFS
 } AOM_REFFRAME;
 
+#if CONFIG_EXT_COMP_REFS
+#define USE_UNI_COMP_REFS 1
+
+typedef enum {
+  UNIDIR_COMP_REFERENCE = 0,
+  BIDIR_COMP_REFERENCE = 1,
+  COMP_REFERENCE_TYPES = 2,
+} COMP_REFERENCE_TYPE;
+#else  // !CONFIG_EXT_COMP_REFS
+#define USE_UNI_COMP_REFS 0
+#endif  // CONFIG_EXT_COMP_REFS
+
 typedef enum { PLANE_TYPE_Y = 0, PLANE_TYPE_UV = 1, PLANE_TYPES } PLANE_TYPE;
 
 #if CONFIG_CFL
@@ -487,6 +499,12 @@
 #define INTRA_INTER_CONTEXTS 4
 #define COMP_INTER_CONTEXTS 5
 #define REF_CONTEXTS 5
+
+#if CONFIG_EXT_COMP_REFS
+#define COMP_REF_TYPE_CONTEXTS 5
+#define UNI_COMP_REF_CONTEXTS 5
+#endif  // CONFIG_EXT_COMP_REFS
+
 #if CONFIG_EXT_INTER && CONFIG_COMPOUND_SINGLEREF
 #define COMP_INTER_MODE_CONTEXTS 4
 #endif  // CONFIG_EXT_INTER && CONFIG_COMPOUND_SINGLEREF
@@ -526,7 +544,17 @@
 #endif  // CONFIG_EXT_REFS
 
 #define SINGLE_REFS (FWD_REFS + BWD_REFS)
+#if CONFIG_EXT_COMP_REFS
+typedef enum {
+  LAST_LAST2_FRAMES,     // { LAST_FRAME, LAST2_FRAME }
+  LAST_GOLDEN_FRAMES,    // { LAST_FRAME, GOLDEN_FRAME }
+  BWDREF_ALTREF_FRAMES,  // { BWDREF_FRAME, ALTREF_FRAME }
+  UNIDIR_COMP_REFS
+} UNIDIR_COMP_REF;
+#define COMP_REFS (FWD_REFS * BWD_REFS + UNIDIR_COMP_REFS)
+#else  // !CONFIG_EXT_COMP_REFS
 #define COMP_REFS (FWD_REFS * BWD_REFS)
+#endif  // CONFIG_EXT_COMP_REFS
 
 #define MODE_CTX_REF_FRAMES (TOTAL_REFS_PER_FRAME + COMP_REFS)