SUPERRES_AUTO: enable dual search for q mode

Dual search is useful for certain clips, e.g. clips where global motion
is used, because superres mode disables global motion.

Baseline vs SUPERRES_AUTO BDRate, Q mode:
- Before = +0.977 (worst clip: +5.745)
- After  = +0.106 (worst clip: +0.705)

BUG=aomedia:2844

Change-Id: I37b1de81a16914801aa0bf8d0b91ebc782dd3000
diff --git a/aom_scale/generic/yv12extend.c b/aom_scale/generic/yv12extend.c
index 834a59d..e5fe38a 100644
--- a/aom_scale/generic/yv12extend.c
+++ b/aom_scale/generic/yv12extend.c
@@ -22,6 +22,7 @@
 static void extend_plane(uint8_t *const src, int src_stride, int width,
                          int height, int extend_top, int extend_left,
                          int extend_bottom, int extend_right) {
+  assert(src != NULL);
   int i;
   const int linesize = extend_left + extend_right + width;
 
diff --git a/av1/encoder/encoder_utils.c b/av1/encoder/encoder_utils.c
index ea8c6ce..28a1634 100644
--- a/av1/encoder/encoder_utils.c
+++ b/av1/encoder/encoder_utils.c
@@ -1238,6 +1238,7 @@
   AV1_COMMON *cm = &cpi->common;
   const YV12_BUFFER_CONFIG *ybf = &cm->cur_frame->buf;
   memset(&cc->copy_buffer, 0, sizeof(cc->copy_buffer));
+  if (ybf->y_crop_width == 0 && ybf->y_crop_height == 0) return;
   if (aom_alloc_frame_buffer(&cc->copy_buffer, ybf->y_crop_width,
                              ybf->y_crop_height, ybf->subsampling_x,
                              ybf->subsampling_y,
diff --git a/av1/encoder/encoder_utils.h b/av1/encoder/encoder_utils.h
index 6a1d8fe..f369cce 100644
--- a/av1/encoder/encoder_utils.h
+++ b/av1/encoder/encoder_utils.h
@@ -830,6 +830,9 @@
 static AOM_INLINE void restore_cur_buf(AV1_COMP *cpi) {
   CODING_CONTEXT *const cc = &cpi->coding_context;
   AV1_COMMON *cm = &cpi->common;
+  if (cc->copy_buffer.y_crop_width == 0 && cc->copy_buffer.y_crop_height == 0) {
+    return;
+  }
   aom_yv12_copy_frame(&cc->copy_buffer, &cm->cur_frame->buf,
                       av1_num_planes(cm));
 }
diff --git a/av1/encoder/superres_scale.c b/av1/encoder/superres_scale.c
index 7c6f840..cb3a54d 100644
--- a/av1/encoder/superres_scale.c
+++ b/av1/encoder/superres_scale.c
@@ -98,9 +98,8 @@
 #if CONFIG_SUPERRES_IN_RECODE
 int av1_superres_in_recode_allowed(const AV1_COMP *const cpi) {
   const AV1EncoderConfig *const oxcf = &cpi->oxcf;
-  // Empirically found to not be beneficial for AOM_Q mode and images coding.
+  // Empirically found to not be beneficial for image coding.
   return oxcf->superres_cfg.superres_mode == AOM_SUPERRES_AUTO &&
-         (oxcf->rc_cfg.mode == AOM_VBR || oxcf->rc_cfg.mode == AOM_CQ) &&
          cpi->rc.frames_to_key > 1;
 }
 #endif  // CONFIG_SUPERRES_IN_RECODE