Fix grid HEIF decoding bug

Root cause is retriever being cleared before usage.

Bug: b/259187246
Test: (1) CTS AImageDecoderTest, (2) displaying grid HEIF image on
device

Change-Id: I2b23445569923e1065e1bd72c7062e700e7ecab5
diff --git a/media/libheif/HeifDecoderImpl.cpp b/media/libheif/HeifDecoderImpl.cpp
index 691eede..7c78900 100644
--- a/media/libheif/HeifDecoderImpl.cpp
+++ b/media/libheif/HeifDecoderImpl.cpp
@@ -518,7 +518,6 @@
     {
         Mutex::Autolock _l(mRetrieverLock);
         weakRetriever = mRetriever;
-        mRetriever.clear();
     }
 
     for (size_t i = 1; i < mNumSlices; i++) {
@@ -551,6 +550,12 @@
         }
     }
     // Hold on to mDataSource in case the client wants to redecode.
+
+    {
+        Mutex::Autolock _l(mRetrieverLock);
+        mRetriever.clear();
+    }
+
     return false;
 }
 
@@ -660,7 +665,10 @@
     mFrameDecoded = true;
 
     // Aggressively clear to avoid holding on to resources
-    mRetriever.clear();
+    {
+        Mutex::Autolock _l(mRetrieverLock);
+        mRetriever.clear();
+    }
 
     // Hold on to mDataSource in case the client wants to redecode.
     return true;