Loading libs/gui/SurfaceComposerClient.cpp +6 −40 Original line number Diff line number Diff line Loading @@ -1922,52 +1922,18 @@ status_t SurfaceComposerClient::setGlobalShadowSettings(const half4& ambientColo // ---------------------------------------------------------------------------- status_t ScreenshotClient::capture(const sp<IBinder>& display, ui::Dataspace /* reqDataspace */, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform, ui::Rotation rotation, bool captureSecureLayers, sp<GraphicBuffer>* outBuffer, bool& outCapturedSecureLayers) { status_t ScreenshotClient::captureDisplay(const DisplayCaptureArgs& captureArgs, ScreenCaptureResults& captureResults) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; DisplayCaptureArgs args; args.displayToken = display; args.pixelFormat = reqPixelFormat; args.sourceCrop = sourceCrop; args.width = reqWidth; args.height = reqHeight; args.useIdentityTransform = useIdentityTransform; args.rotation = rotation; args.captureSecureLayers = captureSecureLayers; ScreenCaptureResults captureResults; status_t ret = s->captureDisplay(args, captureResults); if (ret != NO_ERROR) { return ret; } *outBuffer = captureResults.buffer; outCapturedSecureLayers = captureResults.capturedSecureLayers; return ret; } status_t ScreenshotClient::capture(const sp<IBinder>& display, ui::Dataspace reqDataspace, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform, ui::Rotation rotation, sp<GraphicBuffer>* outBuffer) { bool ignored; return capture(display, reqDataspace, reqPixelFormat, sourceCrop, reqWidth, reqHeight, useIdentityTransform, rotation, false, outBuffer, ignored); return s->captureDisplay(captureArgs, captureResults); } status_t ScreenshotClient::capture(uint64_t displayOrLayerStack, ui::Dataspace* outDataspace, sp<GraphicBuffer>* outBuffer) { status_t ScreenshotClient::captureDisplay(uint64_t displayOrLayerStack, ScreenCaptureResults& captureResults) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; ScreenCaptureResults captureResults; status_t ret = s->captureDisplay(displayOrLayerStack, captureResults); *outBuffer = captureResults.buffer; *outDataspace = captureResults.capturedDataspace; return ret; return s->captureDisplay(displayOrLayerStack, captureResults); } status_t ScreenshotClient::captureLayers(const sp<IBinder>& layerHandle, Loading libs/gui/include/gui/SurfaceComposerClient.h +4 −11 Original line number Diff line number Diff line Loading @@ -597,17 +597,10 @@ class ScreenshotClient { public: // if cropping isn't required, callers may pass in a default Rect, e.g.: // capture(display, producer, Rect(), reqWidth, ...); static status_t capture(const sp<IBinder>& display, ui::Dataspace reqDataSpace, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform, ui::Rotation rotation, bool captureSecureLayers, sp<GraphicBuffer>* outBuffer, bool& outCapturedSecureLayers); static status_t capture(const sp<IBinder>& display, ui::Dataspace reqDataSpace, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform, ui::Rotation rotation, sp<GraphicBuffer>* outBuffer); static status_t capture(uint64_t displayOrLayerStack, ui::Dataspace* outDataspace, sp<GraphicBuffer>* outBuffer); static status_t captureDisplay(const DisplayCaptureArgs& captureArgs, ScreenCaptureResults& captureResults); static status_t captureDisplay(uint64_t displayOrLayerStack, ScreenCaptureResults& captureResults); static status_t captureLayers(const sp<IBinder>& layerHandle, ui::Dataspace reqDataSpace, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, float frameScale, sp<GraphicBuffer>* outBuffer); Loading services/surfaceflinger/tests/Credentials_test.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -260,9 +260,10 @@ TEST_F(CredentialsTest, CaptureTest) { const auto display = SurfaceComposerClient::getInternalDisplayToken(); std::function<status_t()> condition = [=]() { sp<GraphicBuffer> outBuffer; return ScreenshotClient::capture(display, ui::Dataspace::V0_SRGB, ui::PixelFormat::RGBA_8888, Rect(), 0 /*reqWidth*/, 0 /*reqHeight*/, false, ui::ROTATION_0, &outBuffer); DisplayCaptureArgs captureArgs; captureArgs.displayToken = display; ScreenCaptureResults captureResults; return ScreenshotClient::captureDisplay(captureArgs, captureResults); }; ASSERT_NO_FATAL_FAILURE(checkWithPrivileges<status_t>(condition, NO_ERROR, PERMISSION_DENIED)); } Loading Loading
libs/gui/SurfaceComposerClient.cpp +6 −40 Original line number Diff line number Diff line Loading @@ -1922,52 +1922,18 @@ status_t SurfaceComposerClient::setGlobalShadowSettings(const half4& ambientColo // ---------------------------------------------------------------------------- status_t ScreenshotClient::capture(const sp<IBinder>& display, ui::Dataspace /* reqDataspace */, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform, ui::Rotation rotation, bool captureSecureLayers, sp<GraphicBuffer>* outBuffer, bool& outCapturedSecureLayers) { status_t ScreenshotClient::captureDisplay(const DisplayCaptureArgs& captureArgs, ScreenCaptureResults& captureResults) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; DisplayCaptureArgs args; args.displayToken = display; args.pixelFormat = reqPixelFormat; args.sourceCrop = sourceCrop; args.width = reqWidth; args.height = reqHeight; args.useIdentityTransform = useIdentityTransform; args.rotation = rotation; args.captureSecureLayers = captureSecureLayers; ScreenCaptureResults captureResults; status_t ret = s->captureDisplay(args, captureResults); if (ret != NO_ERROR) { return ret; } *outBuffer = captureResults.buffer; outCapturedSecureLayers = captureResults.capturedSecureLayers; return ret; } status_t ScreenshotClient::capture(const sp<IBinder>& display, ui::Dataspace reqDataspace, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform, ui::Rotation rotation, sp<GraphicBuffer>* outBuffer) { bool ignored; return capture(display, reqDataspace, reqPixelFormat, sourceCrop, reqWidth, reqHeight, useIdentityTransform, rotation, false, outBuffer, ignored); return s->captureDisplay(captureArgs, captureResults); } status_t ScreenshotClient::capture(uint64_t displayOrLayerStack, ui::Dataspace* outDataspace, sp<GraphicBuffer>* outBuffer) { status_t ScreenshotClient::captureDisplay(uint64_t displayOrLayerStack, ScreenCaptureResults& captureResults) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; ScreenCaptureResults captureResults; status_t ret = s->captureDisplay(displayOrLayerStack, captureResults); *outBuffer = captureResults.buffer; *outDataspace = captureResults.capturedDataspace; return ret; return s->captureDisplay(displayOrLayerStack, captureResults); } status_t ScreenshotClient::captureLayers(const sp<IBinder>& layerHandle, Loading
libs/gui/include/gui/SurfaceComposerClient.h +4 −11 Original line number Diff line number Diff line Loading @@ -597,17 +597,10 @@ class ScreenshotClient { public: // if cropping isn't required, callers may pass in a default Rect, e.g.: // capture(display, producer, Rect(), reqWidth, ...); static status_t capture(const sp<IBinder>& display, ui::Dataspace reqDataSpace, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform, ui::Rotation rotation, bool captureSecureLayers, sp<GraphicBuffer>* outBuffer, bool& outCapturedSecureLayers); static status_t capture(const sp<IBinder>& display, ui::Dataspace reqDataSpace, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform, ui::Rotation rotation, sp<GraphicBuffer>* outBuffer); static status_t capture(uint64_t displayOrLayerStack, ui::Dataspace* outDataspace, sp<GraphicBuffer>* outBuffer); static status_t captureDisplay(const DisplayCaptureArgs& captureArgs, ScreenCaptureResults& captureResults); static status_t captureDisplay(uint64_t displayOrLayerStack, ScreenCaptureResults& captureResults); static status_t captureLayers(const sp<IBinder>& layerHandle, ui::Dataspace reqDataSpace, ui::PixelFormat reqPixelFormat, const Rect& sourceCrop, float frameScale, sp<GraphicBuffer>* outBuffer); Loading
services/surfaceflinger/tests/Credentials_test.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -260,9 +260,10 @@ TEST_F(CredentialsTest, CaptureTest) { const auto display = SurfaceComposerClient::getInternalDisplayToken(); std::function<status_t()> condition = [=]() { sp<GraphicBuffer> outBuffer; return ScreenshotClient::capture(display, ui::Dataspace::V0_SRGB, ui::PixelFormat::RGBA_8888, Rect(), 0 /*reqWidth*/, 0 /*reqHeight*/, false, ui::ROTATION_0, &outBuffer); DisplayCaptureArgs captureArgs; captureArgs.displayToken = display; ScreenCaptureResults captureResults; return ScreenshotClient::captureDisplay(captureArgs, captureResults); }; ASSERT_NO_FATAL_FAILURE(checkWithPrivileges<status_t>(condition, NO_ERROR, PERMISSION_DENIED)); } Loading