Move computation of fast features
This avoids a valgrind failure and ensures the features are not computed
if there are no valid references.
BUG=aomedia:2375
Change-Id: I3561358b0cfeb816745c47bcc07e6708b64fdfa3
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 18cb98c..1c4ef21 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -5006,7 +5006,7 @@
};
// clang-format on
int num_refs_using_gm = 0;
- int num_frm_corners;
+ int num_frm_corners = -1;
int frm_corners[2 * MAX_CORNERS];
unsigned char *frm_buffer = cpi->source->y_buffer;
if (cpi->source->flags & YV12_FLAG_HIGHBITDEPTH) {
@@ -5015,10 +5015,6 @@
frm_buffer =
downconvert_frame(cpi->source, cpi->common.seq_params.bit_depth);
}
- // compute interest points using FAST features
- num_frm_corners = fast_corner_detect(
- frm_buffer, cpi->source->y_width, cpi->source->y_height,
- cpi->source->y_stride, frm_corners, MAX_CORNERS);
for (frame = ALTREF_FRAME; frame >= LAST_FRAME; --frame) {
ref_buf[frame] = NULL;
RefCntBuffer *buf = get_ref_frame_buf(cm, frame);
@@ -5040,6 +5036,12 @@
ref_buf[frame]->y_crop_height == cpi->source->y_crop_height &&
do_gm_search_logic(&cpi->sf, num_refs_using_gm, frame) &&
!(cpi->sf.selective_ref_gm && skip_gm_frame(cm, frame))) {
+ if (num_frm_corners < 0) {
+ // compute interest points using FAST features
+ num_frm_corners = fast_corner_detect(
+ frm_buffer, cpi->source->y_width, cpi->source->y_height,
+ cpi->source->y_stride, frm_corners, MAX_CORNERS);
+ }
TransformationType model;
const int64_t ref_frame_error = av1_frame_error(
is_cur_buf_hbd(xd), xd->bd, ref_buf[frame]->y_buffer,