summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/hwui/surfacetexture/ImageConsumer.cpp18
-rw-r--r--libs/hwui/surfacetexture/ImageConsumer.h5
2 files changed, 15 insertions, 8 deletions
diff --git a/libs/hwui/surfacetexture/ImageConsumer.cpp b/libs/hwui/surfacetexture/ImageConsumer.cpp
index bae616bbc636..17ee17d5cd1d 100644
--- a/libs/hwui/surfacetexture/ImageConsumer.cpp
+++ b/libs/hwui/surfacetexture/ImageConsumer.cpp
@@ -71,13 +71,16 @@ public:
void makeImage(sp<GraphicBuffer>& graphicBuffer, android_dataspace dataspace,
GrContext* context);
+ void newBufferContent(GrContext* context);
+
private:
// The only way to invoke dtor is with unref, when mUsageCount is 0.
~AutoBackendTextureRelease() {}
GrBackendTexture mBackendTexture;
GrAHardwareBufferUtils::DeleteImageProc mDeleteProc;
- GrAHardwareBufferUtils::DeleteImageCtx mDeleteCtx;
+ GrAHardwareBufferUtils::UpdateImageProc mUpdateProc;
+ GrAHardwareBufferUtils::TexImageCtx mImageCtx;
// Starting with refcount 1, because the first ref is held by SurfaceTexture. Additional refs
// are held by SkImages.
@@ -101,7 +104,8 @@ AutoBackendTextureRelease::AutoBackendTextureRelease(GrContext* context, Graphic
buffer->getWidth(),
buffer->getHeight(),
&mDeleteProc,
- &mDeleteCtx,
+ &mUpdateProc,
+ &mImageCtx,
createProtectedImage,
backendFormat,
false);
@@ -123,7 +127,7 @@ void AutoBackendTextureRelease::unref(bool releaseImage) {
mUsageCount--;
if (mUsageCount <= 0) {
if (mBackendTexture.isValid()) {
- mDeleteProc(mDeleteCtx);
+ mDeleteProc(mImageCtx);
mBackendTexture = {};
}
delete this;
@@ -154,6 +158,12 @@ void AutoBackendTextureRelease::makeImage(sp<GraphicBuffer>& graphicBuffer,
}
}
+void AutoBackendTextureRelease::newBufferContent(GrContext* context) {
+ if (mBackendTexture.isValid()) {
+ mUpdateProc(mImageCtx, context);
+ }
+}
+
void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer,
android_dataspace dataspace, bool forceCreate,
GrContext* context) {
@@ -166,6 +176,8 @@ void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer,
if (!mTextureRelease) {
mTextureRelease = new AutoBackendTextureRelease(context, graphicBuffer.get());
+ } else {
+ mTextureRelease->newBufferContent(context);
}
mDataspace = dataspace;
diff --git a/libs/hwui/surfacetexture/ImageConsumer.h b/libs/hwui/surfacetexture/ImageConsumer.h
index 2fdece989876..3e2a91a251f7 100644
--- a/libs/hwui/surfacetexture/ImageConsumer.h
+++ b/libs/hwui/surfacetexture/ImageConsumer.h
@@ -26,11 +26,6 @@
#include <gui/BufferItem.h>
#include <system/graphics.h>
-namespace GrAHardwareBufferUtils {
-typedef void* DeleteImageCtx;
-typedef void (*DeleteImageProc)(DeleteImageCtx);
-}
-
namespace android {
namespace uirenderer {