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.