summaryrefslogtreecommitdiff
path: root/libs/gui/SurfaceComposerClient.cpp
diff options
context:
space:
mode:
author Chavi Weingarten <chaviw@google.com> 2017-11-28 21:51:34 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-11-28 21:51:34 +0000
commit503b79e3db0d6dce40ea0a8e17bbffd6f6176123 (patch)
tree26e0a903d2a3c539cf18c4a3e801fa4bd3bbad62 /libs/gui/SurfaceComposerClient.cpp
parentc5de5b391c7be208681d7ba9882fa02ea60c4bbc (diff)
parent7206d49b2963ce2e926a5f25fe94aca9c06471e6 (diff)
Merge "Add additional parameters for the captureLayer functions."
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
-rw-r--r--libs/gui/SurfaceComposerClient.cpp29
1 files changed, 26 insertions, 3 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 2adc273651..2466d2555a 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -757,11 +757,34 @@ status_t ScreenshotClient::captureToBuffer(const sp<IBinder>& display,
status_t ScreenshotClient::captureLayers(const sp<IBinder>& layerHandle,
const sp<IGraphicBufferProducer>& producer,
- uint32_t rotation) {
+ Rect sourceCrop, float frameScale) {
sp<ISurfaceComposer> s(ComposerService::getComposerService());
if (s == NULL) return NO_INIT;
- return s->captureLayers(layerHandle, producer,
- static_cast<ISurfaceComposer::Rotation>(rotation));
+ return s->captureLayers(layerHandle, producer, sourceCrop, frameScale);
+}
+
+status_t ScreenshotClient::captureLayersToBuffer(const sp<IBinder>& layerHandle, Rect sourceCrop,
+ float frameScale, sp<GraphicBuffer>* outBuffer) {
+ sp<ISurfaceComposer> s(ComposerService::getComposerService());
+ if (s == NULL) return NO_INIT;
+
+ sp<IGraphicBufferConsumer> gbpConsumer;
+ sp<IGraphicBufferProducer> producer;
+ BufferQueue::createBufferQueue(&producer, &gbpConsumer);
+ sp<BufferItemConsumer> consumer(new BufferItemConsumer(gbpConsumer,
+ GRALLOC_USAGE_HW_TEXTURE |
+ GRALLOC_USAGE_SW_READ_NEVER |
+ GRALLOC_USAGE_SW_WRITE_NEVER,
+ 1, true));
+
+ status_t ret = s->captureLayers(layerHandle, producer, sourceCrop, frameScale);
+ if (ret != NO_ERROR) {
+ return ret;
+ }
+ BufferItem b;
+ consumer->acquireBuffer(&b, 0, true);
+ *outBuffer = b.mGraphicBuffer;
+ return ret;
}
ScreenshotClient::ScreenshotClient()