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)