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 Original line 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 */,
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,
+4 −11
Original line number Original line Diff line number Diff line
@@ -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);
+4 −3
Original line number Original line Diff line number Diff line
@@ -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));
}
}