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;