Move buffer_pool lock/unlock inside av1_superres_upscale

In case of errors in av1_superres_upscale(), aom_internal_error()
was called without unlocking the buffer pool mutex.
This would result in a deadlock when release_frame_buffers() attempts
to lock the mutex.

Now buffer_pool lock/unlocks are moved inside av1_superres_upscale()
and in case of errors, mutex is unlocked before calling
aom_internal_error().

BUG=aomedia:2401

Change-Id: Ic4616a8d431ca611b1187976b0ca4558e71ccec8
diff --git a/av1/common/resize.c b/av1/common/resize.c
index d668eae..ae6698f 100644
--- a/av1/common/resize.c
+++ b/av1/common/resize.c
@@ -1383,21 +1383,26 @@
     aom_get_frame_buffer_cb_fn_t cb = pool->get_fb_cb;
     void *cb_priv = pool->cb_priv;
 
+    lock_buffer_pool(pool);
     // Realloc with callback does not release the frame buffer - release first.
-    if (release_fb_cb(cb_priv, fb))
+    if (release_fb_cb(cb_priv, fb)) {
+      unlock_buffer_pool(pool);
       aom_internal_error(
           &cm->error, AOM_CODEC_MEM_ERROR,
           "Failed to free current frame buffer before superres upscaling");
-
+    }
     // aom_realloc_frame_buffer() leaves config data for frame_to_show intact
     if (aom_realloc_frame_buffer(
             frame_to_show, cm->superres_upscaled_width,
             cm->superres_upscaled_height, seq_params->subsampling_x,
             seq_params->subsampling_y, seq_params->use_highbitdepth,
-            AOM_BORDER_IN_PIXELS, cm->byte_alignment, fb, cb, cb_priv))
+            AOM_BORDER_IN_PIXELS, cm->byte_alignment, fb, cb, cb_priv)) {
+      unlock_buffer_pool(pool);
       aom_internal_error(
           &cm->error, AOM_CODEC_MEM_ERROR,
           "Failed to allocate current frame buffer for superres upscaling");
+    }
+    unlock_buffer_pool(pool);
   } else {
     // Make a copy of the config data for frame_to_show in copy_buffer
     copy_buffer_config(frame_to_show, &copy_buffer);
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 8bed2ad..08ac271 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -5284,9 +5284,7 @@
   if (!av1_superres_scaled(cm)) return;
   assert(!cm->all_lossless);
 
-  lock_buffer_pool(pool);
   av1_superres_upscale(cm, pool);
-  unlock_buffer_pool(pool);
 }
 
 uint32_t av1_decode_frame_headers_and_setup(AV1Decoder *pbi,