Add GrSurfaceOrigin to MakeFromAHardwareBuffer
Add support for kBottomLeft_GrSurfaceOrigin origin for SkImage
backed by an Android hardware buffer.
Bug: b/115610873
Change-Id: I8ba142007ee01c3fc2fd48317b29388d07a7b6e0
Reviewed-on: https://skia-review.googlesource.com/154301
Commit-Queue: Stan Iliev <stani@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/GrAHardwareBufferImageGenerator.cpp b/src/gpu/GrAHardwareBufferImageGenerator.cpp
index 06b4131..7f99b3c 100644
--- a/src/gpu/GrAHardwareBufferImageGenerator.cpp
+++ b/src/gpu/GrAHardwareBufferImageGenerator.cpp
@@ -65,7 +65,8 @@
}
std::unique_ptr<SkImageGenerator> GrAHardwareBufferImageGenerator::Make(
- AHardwareBuffer* graphicBuffer, SkAlphaType alphaType, sk_sp<SkColorSpace> colorSpace) {
+ AHardwareBuffer* graphicBuffer, SkAlphaType alphaType, sk_sp<SkColorSpace> colorSpace,
+ GrSurfaceOrigin surfaceOrigin) {
AHardwareBuffer_Desc bufferDesc;
AHardwareBuffer_describe(graphicBuffer, &bufferDesc);
SkColorType colorType;
@@ -97,17 +98,19 @@
SkImageInfo info = SkImageInfo::Make(bufferDesc.width, bufferDesc.height, colorType,
alphaType, std::move(colorSpace));
bool createProtectedImage = 0 != (bufferDesc.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT);
- return std::unique_ptr<SkImageGenerator>(new GrAHardwareBufferImageGenerator(info, graphicBuffer,
- alphaType, createProtectedImage, bufferDesc.format));
+ return std::unique_ptr<SkImageGenerator>(new GrAHardwareBufferImageGenerator(
+ info, graphicBuffer, alphaType, createProtectedImage,
+ bufferDesc.format, surfaceOrigin));
}
GrAHardwareBufferImageGenerator::GrAHardwareBufferImageGenerator(const SkImageInfo& info,
AHardwareBuffer* hardwareBuffer, SkAlphaType alphaType, bool isProtectedContent,
- uint32_t bufferFormat)
+ uint32_t bufferFormat, GrSurfaceOrigin surfaceOrigin)
: INHERITED(info)
, fHardwareBuffer(hardwareBuffer)
, fBufferFormat(bufferFormat)
- , fIsProtectedContent(isProtectedContent) {
+ , fIsProtectedContent(isProtectedContent)
+ , fSurfaceOrigin(surfaceOrigin) {
AHardwareBuffer_acquire(fHardwareBuffer);
}
@@ -545,7 +548,7 @@
return tex;
},
- desc, kTopLeft_GrSurfaceOrigin, GrMipMapped::kNo, textureType, SkBackingFit::kExact,
+ desc, fSurfaceOrigin, GrMipMapped::kNo, textureType, SkBackingFit::kExact,
SkBudgeted::kNo);
if (!texProxy) {
diff --git a/src/gpu/GrAHardwareBufferImageGenerator.h b/src/gpu/GrAHardwareBufferImageGenerator.h
index a5d7033..2526e0a 100644
--- a/src/gpu/GrAHardwareBufferImageGenerator.h
+++ b/src/gpu/GrAHardwareBufferImageGenerator.h
@@ -31,7 +31,7 @@
class GrAHardwareBufferImageGenerator : public SkImageGenerator {
public:
static std::unique_ptr<SkImageGenerator> Make(AHardwareBuffer*, SkAlphaType,
- sk_sp<SkColorSpace>);
+ sk_sp<SkColorSpace>, GrSurfaceOrigin);
~GrAHardwareBufferImageGenerator() override;
@@ -54,7 +54,8 @@
private:
GrAHardwareBufferImageGenerator(const SkImageInfo&, AHardwareBuffer*, SkAlphaType,
- bool isProtectedContent, uint32_t bufferFormat);
+ bool isProtectedContent, uint32_t bufferFormat,
+ GrSurfaceOrigin surfaceOrigin);
sk_sp<GrTextureProxy> makeProxy(GrContext* context);
void releaseTextureRef();
@@ -64,6 +65,7 @@
AHardwareBuffer* fHardwareBuffer;
uint32_t fBufferFormat;
const bool fIsProtectedContent;
+ GrSurfaceOrigin fSurfaceOrigin;
typedef SkImageGenerator INHERITED;
};