Introduce an enum for reference types.
The related #defines are combined into an enum.
Also, we use the earlier typedef 'MV_REFERENCE_FRAME' as the name of
this enum.
BUG=aomedia:2230
Change-Id: I460642d173baa86f6f69410d5cdfa7e223fbd4c3
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index cdfb3c9..3e8bfcb 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -156,8 +156,6 @@
modes for the Y blocks to the left and above us; for interframes, there
is a single probability table. */
-typedef int8_t MV_REFERENCE_FRAME;
-
typedef struct {
// Number of base colors for Y (0) and UV (1)
uint8_t palette_size[2];
diff --git a/av1/common/enums.h b/av1/common/enums.h
index db9303c..298ba88 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -63,14 +63,6 @@
#define FRAME_OFFSET_BITS 5
#define MAX_FRAME_DISTANCE ((1 << FRAME_OFFSET_BITS) - 1)
-#define REF_FRAMES_LOG2 3
-#define REF_FRAMES (1 << REF_FRAMES_LOG2)
-
-// REF_FRAMES for the cm->ref_frame_map array, 1 scratch frame for the new
-// frame in cm->new_fb_idx, INTER_REFS_PER_FRAME for scaled references on the
-// encoder in the cpi->scaled_ref_idx array.
-#define FRAME_BUFFERS (REF_FRAMES + 1 + INTER_REFS_PER_FRAME)
-
// 4 frame filter levels: y plane vertical, y plane horizontal,
// u plane, and v plane
#define FRAME_LF_COUNT 4
@@ -547,27 +539,49 @@
#define TXFM_PARTITION_CONTEXTS ((TX_SIZES - TX_8X8) * 6 - 3)
typedef uint8_t TXFM_CONTEXT;
-#define NONE_FRAME -1
-#define INTRA_FRAME 0
-#define LAST_FRAME 1
-#define LAST2_FRAME 2
-#define LAST3_FRAME 3
-#define GOLDEN_FRAME 4
-#define BWDREF_FRAME 5
-#define ALTREF2_FRAME 6
-#define ALTREF_FRAME 7
-#define EXTREF_FRAME REF_FRAMES
-#define LAST_REF_FRAMES (LAST3_FRAME - LAST_FRAME + 1)
+// An enum for various types of reference frame types (and some derived values).
+typedef enum ATTRIBUTE_PACKED {
+ NONE_FRAME = -1,
+ INTRA_FRAME,
+ LAST_FRAME,
+ LAST2_FRAME,
+ LAST3_FRAME,
+ GOLDEN_FRAME,
+ BWDREF_FRAME,
+ ALTREF2_FRAME,
+ ALTREF_FRAME,
+ REF_FRAMES,
-#define INTER_REFS_PER_FRAME (ALTREF_FRAME - LAST_FRAME + 1)
+ // Extra/scratch reference frame. It may be:
+ // - used to update the ALTREF2_FRAME ref (see lshift_bwd_ref_frames()), or
+ // - updated from ALTREF2_FRAME ref (see rshift_bwd_ref_frames()).
+ EXTREF_FRAME = REF_FRAMES,
-#define FWD_REFS (GOLDEN_FRAME - LAST_FRAME + 1)
+ // Number of LAST* reference types.
+ LAST_REF_FRAMES = LAST3_FRAME - LAST_FRAME + 1,
+
+ // Number of inter (non-intra) reference types.
+ INTER_REFS_PER_FRAME = ALTREF_FRAME - LAST_FRAME + 1,
+
+ // Number of forward (aka past) reference types.
+ FWD_REFS = GOLDEN_FRAME - LAST_FRAME + 1,
+
+ // Number of backward (aka future) reference types.
+ BWD_REFS = ALTREF_FRAME - BWDREF_FRAME + 1,
+
+ SINGLE_REFS = FWD_REFS + BWD_REFS,
+} MV_REFERENCE_FRAME;
+
+#define REF_FRAMES_LOG2 3
+
+// REF_FRAMES for the cm->ref_frame_map array, 1 scratch frame for the new
+// frame in cm->new_fb_idx, INTER_REFS_PER_FRAME for scaled references on the
+// encoder in the cpi->scaled_ref_idx array.
+#define FRAME_BUFFERS (REF_FRAMES + 1 + INTER_REFS_PER_FRAME)
+
#define FWD_RF_OFFSET(ref) (ref - LAST_FRAME)
-#define BWD_REFS (ALTREF_FRAME - BWDREF_FRAME + 1)
#define BWD_RF_OFFSET(ref) (ref - BWDREF_FRAME)
-#define SINGLE_REFS (FWD_REFS + BWD_REFS)
-
typedef enum ATTRIBUTE_PACKED {
LAST_LAST2_FRAMES, // { LAST_FRAME, LAST2_FRAME }
LAST_LAST3_FRAMES, // { LAST_FRAME, LAST3_FRAME }
diff --git a/av1/common/mvref_common.h b/av1/common/mvref_common.h
index 83f7a1a..bb37357 100644
--- a/av1/common/mvref_common.h
+++ b/av1/common/mvref_common.h
@@ -174,9 +174,9 @@
rf[0] = ref_frame_map[ref_frame_type - REF_FRAMES][0];
rf[1] = ref_frame_map[ref_frame_type - REF_FRAMES][1];
} else {
- rf[0] = ref_frame_type;
- rf[1] = NONE_FRAME;
assert(ref_frame_type > NONE_FRAME);
+ rf[0] = (MV_REFERENCE_FRAME)ref_frame_type;
+ rf[1] = NONE_FRAME;
}
}
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 460293b..0438a6c 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -925,14 +925,15 @@
}
static INLINE int enc_is_ref_frame_buf(AV1_COMP *cpi, RefCntBuffer *frame_buf) {
- MV_REFERENCE_FRAME ref_frame;
AV1_COMMON *const cm = &cpi->common;
- for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
+ int ref_num;
+ for (ref_num = LAST_FRAME; ref_num <= ALTREF_FRAME; ++ref_num) {
+ const MV_REFERENCE_FRAME ref_frame = (MV_REFERENCE_FRAME)ref_num;
const int buf_idx = get_ref_frame_buf_idx(cpi, ref_frame);
if (buf_idx == INVALID_IDX) continue;
if (frame_buf == &cm->buffer_pool->frame_bufs[buf_idx]) break;
}
- return (ref_frame <= ALTREF_FRAME);
+ return (ref_num <= ALTREF_FRAME);
}
// Token buffer is only used for palette tokens.