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

Commit 3af046dc authored by Chavi Weingarten's avatar Chavi Weingarten Committed by android-build-merger
Browse files

Merge "Added captureScreen function for displayId or layerStack" into qt-dev am: afab4f05

am: 7d369287

Change-Id: I4dba11fdc4da13df643fb891f5fc1b70887c772b
parents 99ee376c 7d369287
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -142,6 +142,28 @@ public:
        return result;
    }

    virtual status_t captureScreen(uint64_t displayOrLayerStack, ui::Dataspace* outDataspace,
                                   sp<GraphicBuffer>* outBuffer) {
        Parcel data, reply;
        data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
        data.writeUint64(displayOrLayerStack);
        status_t result = remote()->transact(BnSurfaceComposer::CAPTURE_SCREEN_BY_ID, data, &reply);
        if (result != NO_ERROR) {
            ALOGE("captureScreen failed to transact: %d", result);
            return result;
        }
        result = reply.readInt32();
        if (result != NO_ERROR) {
            ALOGE("captureScreen failed to readInt32: %d", result);
            return result;
        }

        *outDataspace = static_cast<ui::Dataspace>(reply.readInt32());
        *outBuffer = new GraphicBuffer();
        reply.read(**outBuffer);
        return result;
    }

    virtual status_t captureLayers(
            const sp<IBinder>& layerHandleBinder, sp<GraphicBuffer>* outBuffer,
            const ui::Dataspace reqDataspace, const ui::PixelFormat reqPixelFormat,
@@ -1042,6 +1064,19 @@ status_t BnSurfaceComposer::onTransact(
            }
            return NO_ERROR;
        }
        case CAPTURE_SCREEN_BY_ID: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            uint64_t displayOrLayerStack = data.readUint64();
            ui::Dataspace outDataspace = ui::Dataspace::V0_SRGB;
            sp<GraphicBuffer> outBuffer;
            status_t res = captureScreen(displayOrLayerStack, &outDataspace, &outBuffer);
            reply->writeInt32(res);
            if (res == NO_ERROR) {
                reply->writeInt32(static_cast<int32_t>(outDataspace));
                reply->write(*outBuffer);
            }
            return NO_ERROR;
        }
        case CAPTURE_LAYERS: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            sp<IBinder> layerHandleBinder = data.readStrongBinder();
+7 −0
Original line number Diff line number Diff line
@@ -1574,6 +1574,13 @@ status_t ScreenshotClient::capture(const sp<IBinder>& display, const ui::Dataspa
                   useIdentityTransform, rotation, false, outBuffer, ignored);
}

status_t ScreenshotClient::capture(uint64_t displayOrLayerStack, ui::Dataspace* outDataspace,
                                   sp<GraphicBuffer>* outBuffer) {
    sp<ISurfaceComposer> s(ComposerService::getComposerService());
    if (s == nullptr) return NO_INIT;
    return s->captureScreen(displayOrLayerStack, outDataspace, outBuffer);
}

status_t ScreenshotClient::captureLayers(const sp<IBinder>& layerHandle,
                                         const ui::Dataspace reqDataSpace,
                                         const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
+4 −0
Original line number Diff line number Diff line
@@ -247,6 +247,9 @@ public:
                             useIdentityTransform, rotation);
    }

    virtual status_t captureScreen(uint64_t displayOrLayerStack, ui::Dataspace* outDataspace,
                                   sp<GraphicBuffer>* outBuffer) = 0;

    template <class AA>
    struct SpHash {
        size_t operator()(const sp<AA>& k) const { return std::hash<AA*>()(k.get()); }
@@ -473,6 +476,7 @@ public:
        GET_ALLOWED_DISPLAY_CONFIGS,
        GET_DISPLAY_BRIGHTNESS_SUPPORT,
        SET_DISPLAY_BRIGHTNESS,
        CAPTURE_SCREEN_BY_ID,
        // Always append new enum to the end.
    };

+2 −0
Original line number Diff line number Diff line
@@ -515,6 +515,8 @@ public:
                            const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                            uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                            uint32_t 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, const ui::Dataspace reqDataSpace,
                                  const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                  float frameScale, sp<GraphicBuffer>* outBuffer);
+4 −0
Original line number Diff line number Diff line
@@ -623,6 +623,10 @@ public:
                           bool /*captureSecureLayers*/) override {
        return NO_ERROR;
    }
    status_t captureScreen(uint64_t /*displayOrLayerStack*/, ui::Dataspace* /*outDataspace*/,
                           sp<GraphicBuffer>* /*outBuffer*/) override {
        return NO_ERROR;
    }
    virtual status_t captureLayers(
            const sp<IBinder>& /*parentHandle*/, sp<GraphicBuffer>* /*outBuffer*/,
            const ui::Dataspace /*reqDataspace*/, const ui::PixelFormat /*reqPixelFormat*/,
Loading