Clarify indexing in [lr]shift_bdw_ref_frames().
Also clarify some comments.
Based on suggestions in:
https://aomedia-review.googlesource.com/c/aom/+/74481
BUG=aomedia:2230
Change-Id: I18b7e03b76e0cda76815fc370c4f74ebc8dcf723
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 08f3f2b..4a1827d 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -3444,18 +3444,17 @@
// to clear a space to store the closest bwdref
static INLINE void rshift_bwd_ref_frames(AV1_COMP *cpi) {
// TODO(isbs): shift the scaled indices as well
- static const int ordered_bwd[3] = { BWDREF_FRAME - 1, ALTREF2_FRAME - 1,
- EXTREF_FRAME - 1 };
+ static const int ordered_bwd[3] = { BWDREF_FRAME, ALTREF2_FRAME,
+ EXTREF_FRAME };
for (int i = 2; i > 0; --i) {
// [0] is allocated to the current coded frame, i.e. bwdref
- memcpy(
- cpi->interp_filter_selected[ordered_bwd[i] + LAST_FRAME],
- cpi->interp_filter_selected[ordered_bwd[i - 1] + LAST_FRAME],
- sizeof(cpi->interp_filter_selected[ordered_bwd[i - 1] + LAST_FRAME]));
+ memcpy(cpi->interp_filter_selected[ordered_bwd[i]],
+ cpi->interp_filter_selected[ordered_bwd[i - 1]],
+ sizeof(cpi->interp_filter_selected[ordered_bwd[i - 1]]));
- cpi->remapped_ref_idx[ordered_bwd[i]] =
- cpi->remapped_ref_idx[ordered_bwd[i - 1]];
+ cpi->remapped_ref_idx[ordered_bwd[i] - LAST_FRAME] =
+ cpi->remapped_ref_idx[ordered_bwd[i - 1] - LAST_FRAME];
}
}
@@ -3465,18 +3464,17 @@
// to update the bwd reference frame for coding the next frame.
static INLINE void lshift_bwd_ref_frames(AV1_COMP *cpi) {
// TODO(isbs): shift the scaled indices as well
- static const int ordered_bwd[3] = { BWDREF_FRAME - 1, ALTREF2_FRAME - 1,
- EXTREF_FRAME - 1 };
+ static const int ordered_bwd[3] = { BWDREF_FRAME, ALTREF2_FRAME,
+ EXTREF_FRAME };
for (int i = 0; i < 2; ++i) {
// [0] is allocated to the current coded frame, i.e. bwdref
- memcpy(
- cpi->interp_filter_selected[ordered_bwd[i] + LAST_FRAME],
- cpi->interp_filter_selected[ordered_bwd[i + 1] + LAST_FRAME],
- sizeof(cpi->interp_filter_selected[ordered_bwd[i + 1] + LAST_FRAME]));
+ memcpy(cpi->interp_filter_selected[ordered_bwd[i]],
+ cpi->interp_filter_selected[ordered_bwd[i + 1]],
+ sizeof(cpi->interp_filter_selected[ordered_bwd[i + 1]]));
- cpi->remapped_ref_idx[ordered_bwd[i]] =
- cpi->remapped_ref_idx[ordered_bwd[i + 1]];
+ cpi->remapped_ref_idx[ordered_bwd[i] - LAST_FRAME] =
+ cpi->remapped_ref_idx[ordered_bwd[i + 1] - LAST_FRAME];
}
}
#endif // USE_SYMM_MULTI_LAYER
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index c7afcb7..cb286eb 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -709,8 +709,8 @@
// Relevant for an inter frame.
// - Index '0' corresponds to the values for the currently coded frame.
- // - Indices 1 ... REF_FRAMES are used to store values for all the possible
- // reference frames.
+ // - Indices LAST_FRAME ... EXTREF_FRAMES are used to store values for all the
+ // possible inter reference frames.
int interp_filter_selected[REF_FRAMES + 1][SWITCHABLE];
struct aom_codec_pkt_list *output_pkt_list;