Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 470869a5 authored by Chavi Weingarten's avatar Chavi Weingarten Committed by Android (Google) Code Review
Browse files

Merge "Unified display screenshot into one displayCapture function"

parents 4e1f68df 690db386
Loading
Loading
Loading
Loading
+6 −40
Original line number Diff line number Diff line
@@ -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,
+4 −11
Original line number Diff line number Diff line
@@ -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);
+4 −3
Original line number Diff line number Diff line
@@ -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));
}