Limit buffer reset to only when it is necessary

This commit adds conditions to reset pixel values in frame buffer,
so to limit the buffer reset to only when reset is necessary.

BUG=oss-fuzz:10204
BUG=oss-fuzz:10200
BUG=oss-fuzz:10209

Change-Id: I0cbece6b7c2c4db29314a59df5c27fa7682d3042
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 0a50328..14d6cdc 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -88,7 +88,6 @@
                                        const YV12_BUFFER_CONFIG *const buf,
                                        int only_chroma) {
   const int val = 1 << (seq_params->bit_depth - 1);
-
   for (int plane = only_chroma; plane < MAX_MB_PLANE; plane++) {
     const int is_uv = plane > 0;
     for (int row_idx = 0; row_idx < buf->crop_heights[is_uv]; row_idx++) {
@@ -4393,11 +4392,14 @@
       frame_bufs[i].ref_count = 0;
       cm->buffer_pool->release_fb_cb(cm->buffer_pool->cb_priv,
                                      &frame_bufs[i].raw_frame_buffer);
+    } else {
+      // Previous sequence with different bitdepth may have set to a
+      // neutral gray in different bit depth, need reset here.
+      YV12_BUFFER_CONFIG *cur_buf = &frame_bufs[i].buf;
+      if (cur_buf->buffer_alloc_sz >= cur_buf->frame_size)
+        set_planes_to_neutral_grey(seq_params, cur_buf, 0);
     }
     frame_bufs[i].cur_frame_offset = 0;
-    // Previous sequence with different bitdepth may have set to a
-    // neutral gray in different bit depth, need reset here.
-    set_planes_to_neutral_grey(seq_params, &frame_bufs[i].buf, 0);
     av1_zero(frame_bufs[i].ref_frame_offset);
   }
   unlock_buffer_pool(cm->buffer_pool);