diff options
| author | 2017-11-28 21:51:34 +0000 | |
|---|---|---|
| committer | 2017-11-28 21:51:34 +0000 | |
| commit | 503b79e3db0d6dce40ea0a8e17bbffd6f6176123 (patch) | |
| tree | 26e0a903d2a3c539cf18c4a3e801fa4bd3bbad62 /libs/gui/SurfaceComposerClient.cpp | |
| parent | c5de5b391c7be208681d7ba9882fa02ea60c4bbc (diff) | |
| parent | 7206d49b2963ce2e926a5f25fe94aca9c06471e6 (diff) | |
Merge "Add additional parameters for the captureLayer functions."
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
| -rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 29 |
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() |