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.