Fix selective_ref_frame speed feature
Use av1_encoder_get_relative_dist() instead of
get_relative_dist() for relative distance
computation in selective_ref_frame speed feature.
STATS_CHANGED
Change-Id: I9ba480cfc6fec27ff38394d39561d4b4f9b80d45
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index c02f9ee..7c595cb 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -11994,17 +11994,19 @@
if (sf->selective_ref_frame >= 2 ||
(sf->selective_ref_frame == 1 && comp_pred)) {
if (ref_frame[0] == LAST3_FRAME || ref_frame[1] == LAST3_FRAME) {
- if (get_relative_dist(
+ if (av1_encoder_get_relative_dist(
order_hint_info,
- cm->cur_frame->ref_order_hints[LAST3_FRAME - LAST_FRAME],
- cm->cur_frame->ref_order_hints[GOLDEN_FRAME - LAST_FRAME]) <= 0)
+ cm->cur_frame->ref_display_order_hint[LAST3_FRAME - LAST_FRAME],
+ cm->cur_frame
+ ->ref_display_order_hint[GOLDEN_FRAME - LAST_FRAME]) <= 0)
return 1;
}
if (ref_frame[0] == LAST2_FRAME || ref_frame[1] == LAST2_FRAME) {
- if (get_relative_dist(
+ if (av1_encoder_get_relative_dist(
order_hint_info,
- cm->cur_frame->ref_order_hints[LAST2_FRAME - LAST_FRAME],
- cm->cur_frame->ref_order_hints[GOLDEN_FRAME - LAST_FRAME]) <= 0)
+ cm->cur_frame->ref_display_order_hint[LAST2_FRAME - LAST_FRAME],
+ cm->cur_frame
+ ->ref_display_order_hint[GOLDEN_FRAME - LAST_FRAME]) <= 0)
return 1;
}
}
@@ -12015,12 +12017,12 @@
for (int i = 0; i < 2; ++i) {
const RefCntBuffer *const buf = get_ref_frame_buf(cm, ref_frame[i]);
assert(buf != NULL);
- ref_offsets[i] = buf->order_hint;
+ ref_offsets[i] = buf->display_order_hint;
}
- const int ref0_dist = get_relative_dist(order_hint_info, ref_offsets[0],
- current_frame->order_hint);
- const int ref1_dist = get_relative_dist(order_hint_info, ref_offsets[1],
- current_frame->order_hint);
+ const int ref0_dist = av1_encoder_get_relative_dist(
+ order_hint_info, ref_offsets[0], current_frame->display_order_hint);
+ const int ref1_dist = av1_encoder_get_relative_dist(
+ order_hint_info, ref_offsets[1], current_frame->display_order_hint);
if ((ref0_dist <= 0 && ref1_dist <= 0) ||
(ref0_dist > 0 && ref1_dist > 0)) {
return 1;
@@ -12029,16 +12031,18 @@
if (sf->selective_ref_frame >= 3) {
if (ref_frame[0] == ALTREF2_FRAME || ref_frame[1] == ALTREF2_FRAME)
- if (get_relative_dist(
+ if (av1_encoder_get_relative_dist(
order_hint_info,
- cm->cur_frame->ref_order_hints[ALTREF2_FRAME - LAST_FRAME],
- current_frame->order_hint) < 0)
+ cm->cur_frame
+ ->ref_display_order_hint[ALTREF2_FRAME - LAST_FRAME],
+ current_frame->display_order_hint) < 0)
return 1;
if (ref_frame[0] == BWDREF_FRAME || ref_frame[1] == BWDREF_FRAME)
- if (get_relative_dist(
+ if (av1_encoder_get_relative_dist(
order_hint_info,
- cm->cur_frame->ref_order_hints[BWDREF_FRAME - LAST_FRAME],
- current_frame->order_hint) < 0)
+ cm->cur_frame
+ ->ref_display_order_hint[BWDREF_FRAME - LAST_FRAME],
+ current_frame->display_order_hint) < 0)
return 1;
}
@@ -12048,14 +12052,14 @@
if ((ref_frame[0] == ALTREF2_FRAME || ref_frame[1] == ALTREF2_FRAME) &&
(cpi->ref_frame_flags & av1_ref_frame_flag_list[BWDREF_FRAME])) {
// Check if both ALTREF2_FRAME and BWDREF_FRAME are future references.
- const int arf2_dist = get_relative_dist(
+ const int arf2_dist = av1_encoder_get_relative_dist(
order_hint_info,
- cm->cur_frame->ref_order_hints[ALTREF2_FRAME - LAST_FRAME],
- current_frame->order_hint);
- const int bwd_dist = get_relative_dist(
+ cm->cur_frame->ref_display_order_hint[ALTREF2_FRAME - LAST_FRAME],
+ current_frame->display_order_hint);
+ const int bwd_dist = av1_encoder_get_relative_dist(
order_hint_info,
- cm->cur_frame->ref_order_hints[BWDREF_FRAME - LAST_FRAME],
- current_frame->order_hint);
+ cm->cur_frame->ref_display_order_hint[BWDREF_FRAME - LAST_FRAME],
+ current_frame->display_order_hint);
if (arf2_dist > 0 && bwd_dist > 0 && bwd_dist <= arf2_dist) {
// Drop ALTREF2_FRAME as a reference if BWDREF_FRAME is a closer
// reference to the current frame than ALTREF2_FRAME