Remove all named reference definitions in NRS Change-Id: I9a6b33b3ece6f0363e33b5f3b9267bc991222cd7
diff --git a/av1/common/blockd.h b/av1/common/blockd.h index ae32fc7..63e0c8f 100644 --- a/av1/common/blockd.h +++ b/av1/common/blockd.h
@@ -473,7 +473,6 @@ return has_second_ref(mbmi) && (!((mbmi->ref_frame[0] >= BWDREF_FRAME) ^ (mbmi->ref_frame[1] >= BWDREF_FRAME))); } -#endif // !CONFIG_NEW_REF_SIGNALING static INLINE MV_REFERENCE_FRAME comp_ref0(int ref_idx) { static const MV_REFERENCE_FRAME lut[] = { @@ -506,6 +505,7 @@ assert(NELEMENTS(lut) == TOTAL_UNIDIR_COMP_REFS); return lut[ref_idx]; } +#endif // !CONFIG_NEW_REF_SIGNALING PREDICTION_MODE av1_left_block_mode(const MB_MODE_INFO *left_mi);
diff --git a/av1/common/enums.h b/av1/common/enums.h index 9549b29..1a98465 100644 --- a/av1/common/enums.h +++ b/av1/common/enums.h
@@ -723,6 +723,7 @@ #endif // CONFIG_NEW_TX_PARTITION typedef uint8_t TXFM_CONTEXT; +#if !CONFIG_NEW_REF_SIGNALING // An enum for single reference types (and some derived values). enum { NONE_FRAME = -1, @@ -752,6 +753,7 @@ SINGLE_REFS = FWD_REFS + BWD_REFS, }; +#endif // !CONFIG_NEW_REF_SIGNALING #if CONFIG_NEW_REF_SIGNALING #define INTER_REFS_PER_FRAME 7
diff --git a/av1/common/mvref_common.h b/av1/common/mvref_common.h index 172770f..c439086 100644 --- a/av1/common/mvref_common.h +++ b/av1/common/mvref_common.h
@@ -73,20 +73,6 @@ tile->mi_col_end - mi_col - 1); } -static INLINE int8_t get_uni_comp_ref_idx(const MV_REFERENCE_FRAME *const rf) { - // Single ref pred - if (rf[1] <= INTRA_FRAME) return -1; - - // Bi-directional comp ref pred - if ((rf[0] < BWDREF_FRAME) && (rf[1] >= BWDREF_FRAME)) return -1; - - for (int8_t ref_idx = 0; ref_idx < TOTAL_UNIDIR_COMP_REFS; ++ref_idx) { - if (rf[0] == comp_ref0(ref_idx) && rf[1] == comp_ref1(ref_idx)) - return ref_idx; - } - return -1; -} - #if CONFIG_NEW_REF_SIGNALING // Converts a pair of distinct indices (rf) each in [0, n-1], // to an combined index in [0, n*(n-1)/2]. @@ -177,6 +163,20 @@ }; // clang-format on +static INLINE int8_t get_uni_comp_ref_idx(const MV_REFERENCE_FRAME *const rf) { + // Single ref pred + if (rf[1] <= INTRA_FRAME) return -1; + + // Bi-directional comp ref pred + if ((rf[0] < BWDREF_FRAME) && (rf[1] >= BWDREF_FRAME)) return -1; + + for (int8_t ref_idx = 0; ref_idx < TOTAL_UNIDIR_COMP_REFS; ++ref_idx) { + if (rf[0] == comp_ref0(ref_idx) && rf[1] == comp_ref1(ref_idx)) + return ref_idx; + } + return -1; +} + static INLINE int8_t av1_ref_frame_type(const MV_REFERENCE_FRAME *const rf) { if (rf[1] > INTRA_FRAME) { const int8_t uni_comp_ref_idx = get_uni_comp_ref_idx(rf); @@ -203,7 +203,6 @@ rf[1] = NONE_FRAME; } } - #endif // CONFIG_NEW_REF_SIGNALING static uint16_t compound_mode_ctx_map[3][COMP_NEWMV_CTXS] = { @@ -457,86 +456,6 @@ const MB_MODE_INFO *const mbmi); #endif // CONFIG_REF_MV_BANK -#if CONFIG_NEW_REF_SIGNALING -// Temporary function to skip compound combinations that aren't -// represented in av1_mode_defs. This will be needed until the bitstream -// syntax is changed to support these combinations. -static AOM_INLINE int skip_compound_search(int ref1, int ref2) { - assert(ref1 >= 0); - // Single reference case - if (ref2 <= INTRA_FRAME) return 0; - const int ind1 = ref1 - LAST_FRAME; - const int ind2 = ref2 - LAST_FRAME; - - const int skip_comp[REF_FRAMES][REF_FRAMES] = { - { - 1, - 0, - 0, - 0, - 0, - 0, - 0, - }, - { - 1, - 1, - 1, - 1, - 0, - 0, - 0, - }, - { - 1, - 1, - 1, - 1, - 0, - 0, - 0, - }, - { - 1, - 1, - 1, - 1, - 0, - 0, - 0, - }, - { - 1, - 1, - 1, - 1, - 1, - 1, - 0, - }, - { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - }, - { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - }, - }; - return skip_comp[ind1][ind2]; -} -#endif // CONFIG_NEW_REF_SIGNALING - #ifdef __cplusplus } // extern "C" #endif
diff --git a/av1/common/pred_common.h b/av1/common/pred_common.h index 9985117..808a2fe 100644 --- a/av1/common/pred_common.h +++ b/av1/common/pred_common.h
@@ -26,11 +26,13 @@ int base_qindex; } RefFrameMapPair; +#if !CONFIG_NEW_REF_SIGNALING static const MV_REFERENCE_FRAME ref_frame_priority_order[INTER_REFS_PER_FRAME] = { LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME, ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME, }; +#endif // !CONFIG_NEW_REF_SIGNALING static INLINE void init_ref_map_pair( AV1_COMMON *cm, RefFrameMapPair ref_frame_map_pairs[REF_FRAMES],
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index 1d3dba4..36cd895 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -3175,6 +3175,7 @@ AOM_ALT2_FLAG, AOM_ALT_FLAG }; +#if !CONFIG_NEW_REF_SIGNALING // When more than 'max_allowed_refs' are available, we reduce the number of // reference frames one at a time based on this order. static const MV_REFERENCE_FRAME disable_order[] = { @@ -3183,6 +3184,7 @@ ALTREF2_FRAME, GOLDEN_FRAME, }; +#endif // !CONFIG_NEW_REF_SIGNALING static INLINE int get_max_allowed_ref_frames( int selective_ref_frame, unsigned int max_reference_frames) { @@ -3198,33 +3200,6 @@ #endif // CONFIG_NEW_REF_SIGNALING } -static INLINE int get_ref_frame_flags(const SPEED_FEATURES *const sf, - const YV12_BUFFER_CONFIG **ref_frames, - const int ext_ref_frame_flags) { - // cpi->ext_flags.ref_frame_flags allows certain reference types to be - // disabled by the external interface. These are set by - // av1_apply_encoding_flags(). Start with what the external interface allows, - // then suppress any reference types which we have found to be duplicates. - int flags = ext_ref_frame_flags; - - for (int i = 1; i < INTER_REFS_PER_FRAME; ++i) { - const YV12_BUFFER_CONFIG *const this_ref = ref_frames[i]; - // If this_ref has appeared before, mark the corresponding ref frame as - // invalid. For nonrd mode, only disable GOLDEN_FRAME if it's the same - // as LAST_FRAME or ALTREF_FRAME (if ALTREF is being used in nonrd). - int index = (sf->rt_sf.use_nonrd_pick_mode && - ref_frame_priority_order[i] == GOLDEN_FRAME) - ? (1 + sf->rt_sf.use_nonrd_altref_frame) - : i; - for (int j = 0; j < index; ++j) { - if (this_ref == ref_frames[j]) { - flags &= ~(1 << (ref_frame_priority_order[i] - 1)); - break; - } - } - } - return flags; -} #if CONFIG_NEW_REF_SIGNALING // Enforce the number of references for each arbitrary frame based on user // options and speed. @@ -3291,6 +3266,34 @@ } assert(total_valid_refs <= max_allowed_refs); } + +static INLINE int get_ref_frame_flags(const SPEED_FEATURES *const sf, + const YV12_BUFFER_CONFIG **ref_frames, + const int ext_ref_frame_flags) { + // cpi->ext_flags.ref_frame_flags allows certain reference types to be + // disabled by the external interface. These are set by + // av1_apply_encoding_flags(). Start with what the external interface allows, + // then suppress any reference types which we have found to be duplicates. + int flags = ext_ref_frame_flags; + + for (int i = 1; i < INTER_REFS_PER_FRAME; ++i) { + const YV12_BUFFER_CONFIG *const this_ref = ref_frames[i]; + // If this_ref has appeared before, mark the corresponding ref frame as + // invalid. For nonrd mode, only disable GOLDEN_FRAME if it's the same + // as LAST_FRAME or ALTREF_FRAME (if ALTREF is being used in nonrd). + int index = (sf->rt_sf.use_nonrd_pick_mode && + ref_frame_priority_order[i] == GOLDEN_FRAME) + ? (1 + sf->rt_sf.use_nonrd_altref_frame) + : i; + for (int j = 0; j < index; ++j) { + if (this_ref == ref_frames[j]) { + flags &= ~(1 << (ref_frame_priority_order[i] - 1)); + break; + } + } + } + return flags; +} #endif // CONFIG_NEW_REF_SIGNALING // Returns a Sequence Header OBU stored in an aom_fixed_buf_t, or NULL upon
diff --git a/av1/encoder/rdopt.h b/av1/encoder/rdopt.h index f425371..2d22f2d 100644 --- a/av1/encoder/rdopt.h +++ b/av1/encoder/rdopt.h
@@ -244,26 +244,6 @@ USABLE_REF_MV_STACK_SIZE * sizeof(xd->ref_mv_stack[0][0])); } -// This function prunes the mode if either of the reference frame falls in the -// pruning list -static INLINE int prune_ref(const MV_REFERENCE_FRAME *const ref_frame, - const unsigned int *const ref_display_order_hint, - const unsigned int frame_display_order_hint, - const int *ref_frame_list) { - for (int i = 0; i < 2; i++) { - if (ref_frame_list[i] == NONE_FRAME) continue; - - if (ref_frame[0] == ref_frame_list[i] || - ref_frame[1] == ref_frame_list[i]) { - if (av1_encoder_get_relative_dist( - ref_display_order_hint[ref_frame_list[i] - LAST_FRAME], - frame_display_order_hint) < 0) - return 1; - } - } - return 0; -} - #if CONFIG_NEW_REF_SIGNALING static INLINE int prune_ref_by_selective_ref_frame_nrs( const AV1_COMP *const cpi, const MACROBLOCK *const x, @@ -350,6 +330,26 @@ return 0; } #else +// This function prunes the mode if either of the reference frame falls in the +// pruning list +static INLINE int prune_ref(const MV_REFERENCE_FRAME *const ref_frame, + const unsigned int *const ref_display_order_hint, + const unsigned int frame_display_order_hint, + const int *ref_frame_list) { + for (int i = 0; i < 2; i++) { + if (ref_frame_list[i] == NONE_FRAME) continue; + + if (ref_frame[0] == ref_frame_list[i] || + ref_frame[1] == ref_frame_list[i]) { + if (av1_encoder_get_relative_dist( + ref_display_order_hint[ref_frame_list[i] - LAST_FRAME], + frame_display_order_hint) < 0) + return 1; + } + } + return 0; +} + static INLINE int prune_ref_by_selective_ref_frame( const AV1_COMP *const cpi, const MACROBLOCK *const x, const MV_REFERENCE_FRAME *const ref_frame, @@ -392,7 +392,6 @@ return 0; } - #endif // CONFIG_NEW_REF_SIGNALING // This function will copy the best reference mode information from
diff --git a/av1/encoder/rdopt_utils.h b/av1/encoder/rdopt_utils.h index 5c1d080..9e31acb 100644 --- a/av1/encoder/rdopt_utils.h +++ b/av1/encoder/rdopt_utils.h
@@ -35,6 +35,7 @@ MV_REFERENCE_FRAME ref_frame[2]; } MODE_DEFINITION; +#if !CONFIG_NEW_REF_SIGNALING // This array defines the mapping from the enums in THR_MODES to the actual // prediction modes and refrence frames #if CONFIG_NEW_INTER_MODES @@ -488,29 +489,6 @@ }; #endif // CONFIG_NEW_INTER_MODES -static AOM_INLINE void restore_dst_buf(MACROBLOCKD *xd, const BUFFER_SET dst, - const int num_planes) { - for (int i = 0; i < num_planes; i++) { - xd->plane[i].dst.buf = dst.plane[i]; - xd->plane[i].dst.stride = dst.stride[i]; - } -} - -/* clang-format on */ -// Calculate rd threshold based on ref best rd and relevant scaling factors -static AOM_INLINE int64_t get_rd_thresh_from_best_rd(int64_t ref_best_rd, - int mul_factor, - int div_factor) { - int64_t rd_thresh = ref_best_rd; - if (div_factor != 0) { - rd_thresh = ref_best_rd < (div_factor * (INT64_MAX / mul_factor)) - ? ((ref_best_rd / div_factor) * mul_factor) - : INT64_MAX; - } - return rd_thresh; -} - -#if !CONFIG_NEW_REF_SIGNALING static AOM_INLINE THR_MODES get_prediction_mode_idx(PREDICTION_MODE this_mode, MV_REFERENCE_FRAME ref_frame, MV_REFERENCE_FRAME second_ref_frame) { @@ -537,6 +515,28 @@ } #endif // !CONFIG_NEW_REF_SIGNALING +static AOM_INLINE void restore_dst_buf(MACROBLOCKD *xd, const BUFFER_SET dst, + const int num_planes) { + for (int i = 0; i < num_planes; i++) { + xd->plane[i].dst.buf = dst.plane[i]; + xd->plane[i].dst.stride = dst.stride[i]; + } +} + +/* clang-format on */ +// Calculate rd threshold based on ref best rd and relevant scaling factors +static AOM_INLINE int64_t get_rd_thresh_from_best_rd(int64_t ref_best_rd, + int mul_factor, + int div_factor) { + int64_t rd_thresh = ref_best_rd; + if (div_factor != 0) { + rd_thresh = ref_best_rd < (div_factor * (INT64_MAX / mul_factor)) + ? ((ref_best_rd / div_factor) * mul_factor) + : INT64_MAX; + } + return rd_thresh; +} + static AOM_INLINE int inter_mode_data_block_idx(BLOCK_SIZE bsize) { if (bsize == BLOCK_4X4 || bsize == BLOCK_4X8 || bsize == BLOCK_8X4 || bsize == BLOCK_4X16 || bsize == BLOCK_16X4) {