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