From 7206d49b2963ce2e926a5f25fe94aca9c06471e6 Mon Sep 17 00:00:00 2001 From: chaviw Date: Fri, 10 Nov 2017 16:16:12 -0800 Subject: Add additional parameters for the captureLayer functions. 1. Added new captureLayers function that will return a GraphicBuffer instead of storing into a Surface. 2. Added crop to captureLayers function. 3. Added frameScale to allow captures to scale. 4. Removed rotation parameter from captureLayers since it will always be in the correct orientation. Test: Transaction_test ScreenCaptureTest.CaptureCrop, .CaptureSize Change-Id: Ib16d8575cf0c103126b9427ad32e2d28d568ea61 --- libs/gui/SurfaceComposerClient.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'libs/gui/SurfaceComposerClient.cpp') 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& display, status_t ScreenshotClient::captureLayers(const sp& layerHandle, const sp& producer, - uint32_t rotation) { + Rect sourceCrop, float frameScale) { sp s(ComposerService::getComposerService()); if (s == NULL) return NO_INIT; - return s->captureLayers(layerHandle, producer, - static_cast(rotation)); + return s->captureLayers(layerHandle, producer, sourceCrop, frameScale); +} + +status_t ScreenshotClient::captureLayersToBuffer(const sp& layerHandle, Rect sourceCrop, + float frameScale, sp* outBuffer) { + sp s(ComposerService::getComposerService()); + if (s == NULL) return NO_INIT; + + sp gbpConsumer; + sp producer; + BufferQueue::createBufferQueue(&producer, &gbpConsumer); + sp 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() -- cgit v1.2.3-59-g8ed1b